I want to dynamically set saturation colorfilter for certain items in recyclerview. But eventhough i am not getting any error, it is not getting reflected on screen. This is my code:
Adapter 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 Layout:
<?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>
What am i missing? I even tried PorterDuffColorFilter, but still not working.
Finally got it working. Since colormatrix colorfilter did not help, i used PorterDuffColorFilter to set color filter for the linearlayout and its child imageview as follows:
@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);
}
}
}