欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

【吐槽】RecyclerView沒(méi)有提供分割線的方法,想要加個(gè)線還要自己畫,點(diǎn)擊事件的監(jiān)聽(tīng)都要自己實(shí)現(xiàn),不過(guò)真的好用。

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

好像邏輯也不難,但是真的好麻煩,比如我要給我的瀑布流布局加一條系統(tǒng)自帶的分割線,系統(tǒng)自帶的就行,那我要新建一個(gè)實(shí)現(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中得到一個(gè)Drawable對(duì)象
      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,為每一個(gè)childView描繪divider
     * @param c 畫布對(duì)象
     * @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,為它們的右邊方繪制分割線,就是計(jì)算出上下左右四個(gè)值畫一個(gè)矩形
      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、沒(méi)有3。

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

以上這篇Android 給RecyclerView添加分割線的具體步驟(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論