Android - 在 recyclerview 项目上设置 colofilter 没有得到反映

Android - Setting colofilter on recyclerview items not getting reflected

我想为 recyclerview 中的某些项目动态设置饱和度滤色器。但是即使我没有收到任何错误,它也没有反映在屏幕上。这是我的代码:

适配器class:

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.GridViewHolder> {

ArrayList<HashMap<String, String>> items;
Context context;

public DashBoardRecyclerViewAdapter(Context context, ArrayList<HashMap<String, String>> items) {
    this.items = items;
    this.context = context;
}

@Override
public GridViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_list_items, viewGroup, false);
    return new GridViewHolder(v, context);
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void onBindViewHolder(GridViewHolder gridViewHolder, int i) {
    Paint paint = new Paint();
    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.setSaturation(0f);
    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(colorMatrix);
    for (Map.Entry<String, String> mapEntry : items.get(i).entrySet()) {
        String key = mapEntry.getKey();
        String value = mapEntry.getValue();
        gridViewHolder.keyTxtView.setText(key);
        gridViewHolder.valueTxtView.setText(value);
        if (value == null || value.equals("")) {
            paint.setColorFilter(filter);
            gridViewHolder.getContainerView().setLayerPaint(paint);
        }
    }

}

@Override
public int getItemCount() {
    return items.size();
}

public static class GridViewHolder extends RecyclerView.ViewHolder {
    TextView keyTxtView, valueTxtView;
    View containerView;

    GridViewHolder(View v, Context context) {
        super(v);
        containerView = v.findViewById(R.id.grid_item_container);
        keyTxtView = (TextView) v.findViewById(R.id.keyTxtView);
        valueTxtView = (TextView) v.findViewById(R.id.valueTxtView);
    }

    public View getContainerView() {
        return containerView;
    }

}

}

XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_item_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:background="#f1f1f1"
    android:padding="@dimen/activity_horizontal_margin">

<!-- TextViews -->

</LinearLayout>

我错过了什么?我什至尝试了 PorterDuffColorFilter,但仍然无法正常工作。

终于成功了。由于 colormatrix colorfilter 没有帮助,我使用 PorterDuffColorFilter 为 linearlayout 及其子图像视图设置颜色过滤器,如下所示:

@Override
public void onBindViewHolder(GridViewHolder gridViewHolder, int i) {
    PorterDuffColorFilter greyFilter = new PorterDuffColorFilter(0xffc6c9ce, PorterDuff.Mode.SRC_ATOP);
    PorterDuffColorFilter greyFilterImg = new PorterDuffColorFilter(0xFF6E6E6E, PorterDuff.Mode.SRC_ATOP);
    for (Map.Entry<String, String> mapEntry : items.get(i).entrySet()) {
        String key = mapEntry.getKey();
        String value = mapEntry.getValue();
        gridViewHolder.keyTxtView.setText(key);
        gridViewHolder.valueTxtView.setText(value);
        if (value == null || value.equals("")) {
            gridViewHolder.my_imgview.getDrawable().mutate().setColorFilter(greyFilterImg);
            gridViewHolder.getContainerView().getBackground().setColorFilter(greyFilter);
        }
    }

}