91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-09 07:23:00 來源:腳本之家 閱讀:304 作者:jingxian 欄目:移動開發

【吐槽】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添加分割線的具體步驟(分享)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交口县| 双牌县| 长海县| 新建县| 新民市| 丹寨县| 卢龙县| 湛江市| 共和县| 滕州市| 左贡县| 宜兰县| 望江县| 邹平县| 茌平县| 江门市| 昌邑市| 小金县| 顺平县| 科技| 吉木萨尔县| 嘉善县| 厦门市| 都昌县| 宁津县| 临汾市| 会理县| 宜黄县| 秦皇岛市| 大理市| 南京市| 永年县| 马鞍山市| 保山市| 绥滨县| 文化| 上高县| 吉隆县| 香港| 临沭县| 江川县|