成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

RecycleView 與 Elevation

neu / 2611人閱讀

摘要:以前一直用,因?yàn)榭梢愿愣ń^大部分需求。如果只用做透明的分割線,復(fù)寫(xiě)就可以實(shí)現(xiàn)了。列表本身如果對(duì)分割線的不敏感,復(fù)寫(xiě)就可以。陰影是子打在父上的子必須設(shè)置父必須比子稍大一些,父不要用,在子上用屬性

RecycleView

以前一直用ListView,因?yàn)長(zhǎng)istView可以搞定絕大部分需求。最近項(xiàng)目UI做了很大調(diào)整,需要寬度不同的Item混排,記錄一下遇到的問(wèn)題。
類(lèi)似這樣效果

寬度不同的Item混排-SpanSizeLookup

這個(gè)很簡(jiǎn)單,一個(gè)方法就搞定了

int maxSpanSize = 2;
GridLayoutManager manager = new GridLayoutManager(mContext, maxSpanSize, GridLayoutManager.VERTICAL, false);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        HomeItemInfo itemInfo = homeItemInfoList.get(position);
        if (itemInfo.isTwoItem()) {
            return 1;//  1/maxSpanSize, 這里代表占最大寬度的1/2
        } else {
            return 2;//  2/maxSpanSize, 這里代表與最大寬度等寬
        }
    }
});
分割線 ItemDecoration

onDrawOver
繪制在圖層的最上層

onDraw
繪制圖層在ItemView以下,所以如果繪制區(qū)域與ItemView區(qū)域相重疊,會(huì)被遮擋

getItemOffsets
設(shè)置ItemView的內(nèi)嵌偏移長(zhǎng)度

RecycleView的ItemDecoration 用起來(lái)比ListView的Divider還是復(fù)雜很多。
如果只用做透明的分割線,復(fù)寫(xiě)getItemOffsets就可以實(shí)現(xiàn)了。列表本身如果對(duì)分割線的不敏感,復(fù)寫(xiě)onDrawOver就可以。一些復(fù)雜的分割線需要同時(shí)復(fù)寫(xiě)getItemOffsets、onDrawOver,計(jì)算還是有些麻煩的。下面分享下getItemOffsets的計(jì)算。

public class RecycleDivider extends RecyclerView.ItemDecoration {

    private int rightMargin = 100;//px, item距離右邊的margin
    private int leftMargin = 100;//px, item距離左邊的margin
    private int verticalDivider = 20;//px, 豎直方向分割線的寬度
    private int horizontalDivider = 10;//px, 水平方向分割線的寬度

    private List itemInfos = new ArrayList<>();

    public RecycleDivider() {
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        GridLayoutManager layoutManager = (GridLayoutManager) parent.getLayoutManager();
        GridLayoutManager.SpanSizeLookup lookup = layoutManager.getSpanSizeLookup();
        GridLayoutManager.LayoutParams lp = (GridLayoutManager.LayoutParams) view.getLayoutParams();
        int childPosition = parent.getChildAdapterPosition(view);
        int spanCount = layoutManager.getSpanCount();
        int position = parent.getChildAdapterPosition(view);//得到它在總數(shù)里面的位置
        int spanIndex = lookup.getSpanIndex(position, layoutManager.getSpanCount());//獲取每排的位置
        int spanSize = lookup.getSpanSize(position);//獲取它所占有的比重,上面講的

        if (layoutManager.getOrientation() == GridLayoutManager.VERTICAL) {//這里只處理豎直方向的列表
            //豎直方向
            if (layoutManager.getSpanSizeLookup().getSpanGroupIndex(childPosition, spanCount) == 0) {//第一排的需要上面
                outRect.top = horizontalDivider;
            }
            outRect.bottom = horizontalDivider;

            //水平方向,這里只適合一行兩個(gè)item的情況
            //每個(gè)item的寬度是均分的,如果每個(gè)item的outRect.left, outRect.right加起來(lái)的和不一樣,會(huì)導(dǎo)致item大小不一致
            outRect.left = verticalDivider / 2;
            outRect.right = verticalDivider / 2;
            boolean isRight = spanIndex + spanSize == spanCount;//最右
            boolean isLeft = spanIndex == 0;//最左
            if (isLeft) {
                outRect.left = leftMargin;
            }
            if (isRight) {
                outRect.right = rightMargin;
            }
        }
    }
}
Elevation

Android從5.0開(kāi)始支持陰影,5.0之前可以用CardView,但是CardView用padding實(shí)現(xiàn),對(duì)界面會(huì)有影響,可以只在5.0以上支持陰影。

陰影是子View打在父View上的

子View必須設(shè)置Background

父View必須比子View稍大一些,父View不要用padding,在子View上用Margin屬性



    

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69225.html

相關(guān)文章

  • 數(shù)字高程模型(Digital Elevation Model) DEM 切片以及數(shù)據(jù)發(fā)布展示學(xué)習(xí)筆

    摘要:是一套庫(kù),用來(lái)渲染地球,區(qū)域地圖,和多種要素,不需要安裝任何插件就能在支持最新標(biāo)準(zhǔn)的瀏覽器上運(yùn)行,支持硬件加速,非常適合動(dòng)態(tài)數(shù)據(jù)在圖層上的展示,是一個(gè)跨平臺(tái),開(kāi)源,非常有前途的表現(xiàn)層庫(kù)。 Cesiumjs 是一套javascript庫(kù),用來(lái)渲染3D地球,2D區(qū)域地圖,和多種GIS要素,不需要安裝任何插件就能在支持最新HTML5標(biāo)準(zhǔn)的瀏覽器上運(yùn)行,支持WebGL硬件加速,非常適合動(dòng)態(tài)數(shù)據(jù)...

    FleyX 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

neu

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<