在适配器中为所有对象更改颜色的动态色调可绘制

问题描述 投票:0回答:1

我使用齐射连接从服务器获取字符串数组。每个单个字符串都以十六进制包含不同的颜色。我使用这种颜色在适配器中设置可绘制的色调。

这里是我在适配器中的代码:

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
    // Get item from position
    MyObject object = array_data.get(position);
    ...
    ...
    Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_beenhere_black_24dp);
    Drawable wrappedDrawable;
    if (unwrappedDrawable != null) {
        wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
        DrawableCompat.setTint(wrappedDrawable, object.getMyColor());
        holder.imvPreparationTime.setImageDrawable(wrappedDrawable);
    }

不幸的是,这种行为是不正确的。 recyclerview中所有可绘制项目的颜色都相同,并且在滚动过程中所有颜色都会改变。

enter image description here

我该如何实现目标?我希望每个项目都有自己的颜色并且不要改变。

android imageview adapter drawable android-viewholder
1个回答
0
投票

由于recyclerView重复使用了物品,因此经常会有这种行为。最简单的方法是为要设置色调的视图添加其他视图。例如:

if (unwrappedDrawable != null) {
        wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
        DrawableCompat.setTint(wrappedDrawable, object.getMyColor());
        holder.imvPreparationTime.setImageDrawable(wrappedDrawable);
    } else {
        holder.imvPreparationTime.setImageDrawable(<Some Other drawable, for example default one>);
    }

这个想法是强制回收者视图在项目上绘制一些东西,而不是重复使用已经设置的项目。

© www.soinside.com 2019 - 2024. All rights reserved.