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);
}
}
}
我想为 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);
}
}
}