首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在android RecyclerView中同时设置两项颜色

在Android RecyclerView中同时设置两项颜色,可以通过创建自定义的ItemDecoration来实现。ItemDecoration可以用于在RecyclerView的item之间绘制分隔线、边距等效果。

下面是一个示例代码,演示如何在RecyclerView中同时设置两项颜色:

首先,创建一个自定义的ItemDecoration类,命名为DualColorItemDecoration。在该类中,我们可以重写getItemOffsets()方法来设置各个item的偏移量,并在onDraw()方法中绘制颜色。

代码语言:txt
复制
public class DualColorItemDecoration extends RecyclerView.ItemDecoration {
    private int color1;
    private int color2;

    public DualColorItemDecoration(int color1, int color2) {
        this.color1 = color1;
        this.color2 = color2;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        int position = parent.getChildAdapterPosition(view);

        // 设置偶数位置的item左侧为color1,奇数位置的item左侧为color2
        if (position % 2 == 0) {
            outRect.left = 0;
        } else {
            outRect.left = parent.getContext().getResources().getDimensionPixelSize(R.dimen.divider_height);
        }
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int childCount = parent.getChildCount();
        int left, right, top, bottom;

        for (int i = 0; i < childCount; i++) {
            View child = parent.getChildAt(i);
            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            // 根据位置绘制不同颜色的矩形
            if (i % 2 == 0) {
                left = child.getLeft() - params.leftMargin;
                right = child.getLeft() + parent.getContext().getResources().getDimensionPixelSize(R.dimen.divider_height);
                top = child.getTop() - params.topMargin;
                bottom = child.getBottom() + params.bottomMargin;
                c.drawRect(left, top, right, bottom, new Paint(Paint.ANTI_ALIAS_FLAG) {
                    {
                        setColor(color1);
                        setStyle(Paint.Style.FILL);
                    }
                });
            } else {
                left = child.getLeft() - params.leftMargin;
                right = child.getLeft() + parent.getContext().getResources().getDimensionPixelSize(R.dimen.divider_height);
                top = child.getTop() - params.topMargin;
                bottom = child.getBottom() + params.bottomMargin;
                c.drawRect(left, top, right, bottom, new Paint(Paint.ANTI_ALIAS_FLAG) {
                    {
                        setColor(color2);
                        setStyle(Paint.Style.FILL);
                    }
                });
            }
        }
    }
}

在RecyclerView的Adapter中,使用DualColorItemDecoration类的实例作为RecyclerView的addItemDecoration()方法的参数,即可实现在RecyclerView中同时设置两项颜色。

代码语言:txt
复制
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

// 设置颜色,此处以蓝色和红色为例
int color1 = ContextCompat.getColor(this, R.color.blue);
int color2 = ContextCompat.getColor(this, R.color.red);

// 创建自定义的ItemDecoration并添加到RecyclerView中
DualColorItemDecoration itemDecoration = new DualColorItemDecoration(color1, color2);
recyclerView.addItemDecoration(itemDecoration);

以上代码中,需要在res/values/colors.xml文件中定义蓝色和红色的颜色值:

代码语言:txt
复制
<resources>
    <color name="blue">#2196F3</color>
    <color name="red">#F44336</color>
</resources>

通过以上步骤,就可以在Android RecyclerView中同时设置两项颜色了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券