博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView分隔条
阅读量:674 次
发布时间:2019-03-16

本文共 4317 字,大约阅读时间需要 14 分钟。

因为没能找到直接的控件,给RecyclerView添加item间隔,及定义分隔条颜色,所以自定义RecyclerView分隔条,方便自定义分隔条颜色,item间隔,

package com.custom.views;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import android.view.View;import androidx.annotation.NonNull;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;public class RecyclerViewDivider extends RecyclerView.ItemDecoration{    private final Context mContext;    private final int mOrientation;//item默认间隔宽度    private static final int DEFAULT_INTERVAL = 24;    private static final int DEFAULT_DIVIDER_COLOR = Color.GRAY;//分隔条宽度    private final int mDividerPixel = 2;    private final int mInterval;    private final int mDividerColor;    private final Paint mPaint;    private final Drawable mDivider;    public RecyclerViewDivider(Context context, int orientation) {        this(context, orientation, DEFAULT_INTERVAL, DEFAULT_DIVIDER_COLOR);    }    public RecyclerViewDivider(Context context, int orientation, int interval) {        this(context, orientation, interval, DEFAULT_DIVIDER_COLOR);    }    public RecyclerViewDivider(Context context, int orientation, int interval, int color) {        if (orientation != LinearLayoutManager.HORIZONTAL && orientation != LinearLayoutManager.VERTICAL) {            throw new IllegalArgumentException("orientation invalid.");        }        mContext = context;        mOrientation = orientation;        mInterval = interval;        mDividerColor = color;        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        mPaint.setColor(mDividerColor);        mPaint.setStyle(Paint.Style.FILL);        mDivider = new ColorDrawable(Color.GRAY);    }    @Override    public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {        super.getItemOffsets(outRect, view, parent, state);        if (mOrientation == LinearLayoutManager.HORIZONTAL) {            outRect.set(0, 0, mDividerPixel + DEFAULT_INTERVAL, 0);        } else if (mOrientation == LinearLayoutManager.VERTICAL) {            outRect.set(0, 0, 0, mDividerPixel + DEFAULT_INTERVAL);        }    }    @Override    public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {        super.onDraw(canvas, parent, state);        if (mOrientation == LinearLayoutManager.HORIZONTAL) {            drawVertical(canvas, parent);        } else {            drawHorizontal(canvas, parent);        }    }    private void drawHorizontal(Canvas canvas, RecyclerView recyclerView) {        final int left = recyclerView.getPaddingLeft();        final int right = recyclerView.getMeasuredWidth() - recyclerView.getPaddingLeft();        final int childSize = recyclerView.getChildCount();        for (int i = 0; i < childSize - 1; i++) {            final View child = recyclerView.getChildAt(i);            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();//调整分隔条在间隔宽度中间            final int top = child.getBottom() + layoutParams.bottomMargin + DEFAULT_INTERVAL / 2;            final int bottom = top + mDividerPixel;            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(canvas);            canvas.drawRect(left, top, right, bottom ,mPaint);        }    }    private void drawVertical(Canvas canvas, RecyclerView recyclerView) {        final int top = recyclerView.getPaddingTop();        final int bottom = recyclerView.getMeasuredHeight() - recyclerView.getPaddingBottom();        final int childSize = recyclerView.getChildCount();        for (int i = 0; i < childSize - 1; i++) {            final View child = recyclerView.getChildAt(i);            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();//调整分隔条在间隔宽度中间            final int left = child.getRight() + layoutParams.rightMargin + DEFAULT_INTERVAL / 2;            final int right = left + mDividerPixel;            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(canvas);            canvas.drawRect(left, top, right, bottom, mPaint);        }    }}

 

转载地址:http://qdeqz.baihongyu.com/

你可能感兴趣的文章