国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 給RecyclerView添加分割線的具體步驟(分享)

2019-10-23 18:30:42
字體:
來源:轉載
供稿:網友

【吐槽】RecyclerView沒有提供分割線的方法,想要加個線還要自己畫,點擊事件的監聽都要自己實現,不過真的好用。

給RecyclerView添加分割線的步驟

1、新建類繼承于RecyclerView.ItemDecoration,此為是抽象類:

  public static abstract class ItemDecoration {  public void onDraw(Canvas c, RecyclerView parent, State state) {    onDraw(c, parent);  }  public void onDrawOver(Canvas c, RecyclerView parent, State state) {    onDrawOver(c, parent);  }  public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {    getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),        parent);  }}

 

“onDraw和onDrawOver,顯然,這兩個方法是用于繪制的,那么繪制分割線的邏輯可以放在這里面,它們二者的具體區別是:onDraw是在item view繪制之前調用,而onDrawOver是在item view繪制之后調用,因此我們一般選擇重寫其中一個方法即可。getItemOffsets,這個方法是告訴RecyclerView在繪制完一個item view的時候,應該留下多少空位,以便于繪制分割線。”

好像邏輯也不難,但是真的好麻煩,比如我要給我的瀑布流布局加一條系統自帶的分割線,系統自帶的就行,那我要新建一個實現類:

public class DividerItemDecoration extends RecyclerView.ItemDecoration {    //使用系統自帶的listDivider    private static final int[] ATTRS = new int[]{        android.R.attr.listDivider    };    private Drawable mDivider;    public DividerItemDecoration(Context context) {      super();      // 從TypedArray中得到一個Drawable對象      final TypedArray typedArray = context.obtainStyledAttributes(ATTRS);      mDivider = typedArray.getDrawable(0);      typedArray.recycle();    }    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {      super.onDraw(c, parent, state);      drawDivider(c, parent);    }    /**     * 遍歷childView,為每一個childView描繪divider     * @param c 畫布對象     * @param parent 父控件即RecyclerView     */    private void drawDivider(Canvas c, RecyclerView parent) {      //獲取分割線的上邊距,即RecyclerView的padding值      final int top = parent.getPaddingTop();      //分割線下邊距      final int bottom = parent.getHeight() - parent.getPaddingBottom();      final int childCount = parent.getChildCount();      //遍歷所有item view,為它們的右邊方繪制分割線,就是計算出上下左右四個值畫一個矩形      for (int i = 0; i < childCount; i++) {        final View child = parent.getChildAt(i);        final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();        final int left = child.getRight() + params.rightMargin;        final int right = left + mDivider.getIntrinsicWidth();        //畫右邊的divider        mDivider.setBounds(left, top, right, bottom);        mDivider.draw(c);        //畫完右邊畫底邊        mDivider.setBounds(child.getLeft() + child.getPaddingLeft(), child.getBottom() + params.bottomMargin,            child.getRight() - child.getPaddingRight(), child.getBottom() + mDivider.getIntrinsicHeight());        mDivider.draw(c);      }    }    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {      super.getItemOffsets(outRect, view, parent, state);      outRect.set(0, 0, mDivider.getIntrinsicHeight(), mDivider.getIntrinsicHeight());    }  }

2、為RecyclerView添加寫好的ItemDecoration即可

mRecyclerView.addItemDecoration(new DividerItemDecoration(this));

3、沒有3。

其實從 RecyclerView.ItemDecoration 的名字就看得出來,它是RecyclerView的item的裝飾品,也就是說,除了畫分割線,想畫什么都是可以的。

以上這篇Android 給RecyclerView添加分割線的具體步驟(分享)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桂林市| 民县| 九龙城区| 台湾省| 九寨沟县| 亚东县| 石台县| 昭平县| 江西省| 渑池县| 楚雄市| 搜索| 循化| 新沂市| 庄河市| 酒泉市| 扎鲁特旗| 克山县| 阿拉尔市| 南川市| 巴林右旗| 鲁山县| 财经| 宁陵县| 改则县| 泊头市| 黎川县| 德庆县| 青神县| 威宁| 凤山市| 临夏市| 陆河县| 鱼台县| 黄冈市| 忻城县| 常宁市| 上虞市| 昌乐县| 萍乡市| 涿州市|