最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年04月22日 11:01:45   投稿:jingxian  
下面小編就為大家?guī)硪黄狝ndroid 給RecyclerView添加分割線的具體步驟(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

給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,顯然,這兩個方法是用于繪制的,那么繪制分割線的邏輯可以放在這里面,它們二者的具體區(qū)別是:onDraw是在item view繪制之前調(diào)用,而onDrawOver是在item view繪制之后調(diào)用,因此我們一般選擇重寫其中一個方法即可。getItemOffsets,這個方法是告訴RecyclerView在繪制完一個item view的時候,應(yīng)該留下多少空位,以便于繪制分割線?!?/p>

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

public class DividerItemDecoration extends RecyclerView.ItemDecoration {
    //使用系統(tǒng)自帶的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添加分割線的具體步驟(分享)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

永昌县| 东兰县| 北碚区| 海南省| 新沂市| 军事| 阳原县| 股票| 万盛区| 嵊泗县| 裕民县| 淅川县| 尉氏县| 巴彦县| 九龙县| 朝阳区| 巨野县| 海城市| 兴仁县| 长治县| 虞城县| 麻栗坡县| 滨海县| 若尔盖县| 辽中县| 寻乌县| 金堂县| 仁布县| 同仁县| 张家港市| 铅山县| 宜黄县| 安阳县| 喀喇| 德化县| 上犹县| 太湖县| 丹阳市| 嘉定区| 丰镇市| 游戏|