java - RecyclerView - 根据标志实现黑白项目图像

标签 java android android-recyclerview

我尝试创建一个显示图像的RecyclerView。我想实现一个功能,如果某些变量状态为“关闭”,则将图像项目设为黑白,否则将其保留为 RGB。

我有一个名为Player的对象。 Player 包含:int idint imgAdrs字符串状态

我向 RecyclerView 传递一个包含所有玩家图像地址 allPlayers 的数组,以及一个包含所有玩家状态 mStatus 的数组。

由于我试图避免每个项目都有两张图片(一张 RGB 和第二张 BW) - 我尝试在 ViewHolder 构造函数初始化期间对 ImageView 项目应用 BW 过滤器。

但是status变量没有传递给ViewHolder(statusnull),并且可见仅适用于 RecyclerViewAdapter

有人可以帮我解决这个问题吗?

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

    private ArrayList<Integer> allPlayers = new ArrayList<>();
    private ArrayList<String> mStatus = new ArrayList<>();
    private Context mContext;

    public RecyclerViewAdapter(Context mContext, ArrayList<Integer> mImages, ArrayList<String> mStatus) {
        this.allPlayers = mImages;
        this.mStatus = mStatus;
        this.mContext = mContext;
    }

    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.lay_players_item_list, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {   
        Glide.with(mContext)
                .asBitmap()
                .load(allPlayers.get(position))
                .into(holder.image);

        holder.status = mStatus.get(position);
        holder.parentLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, "(:", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() { //How many items are in the list
        return allPlayers.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
            ImageView image;
        RelativeLayout parentLayout;
        String status;

        public ViewHolder(View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.image);
            parentLayout = itemView.findViewById(R.id.parent_layout);

            if (status.equals("CLOSE")) {
                ColorMatrix matrix = new ColorMatrix();
                matrix.setSaturation(0);

                ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
                image.setColorFilter(filter);

            }
        }
    }

最佳答案

在onBindViewHolder中添加此代码

        if (mStatus.get(position).equals("CLOSE")) {
            ColorMatrix matrix = new ColorMatrix();
            matrix.setSaturation(0);

            ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
            holder.image.setColorFilter(filter);

        }

您只能在 onBindViewHolder 方法内编辑任何 View 。 Viewholder 就像一个仅保留您的 View 的支架。

请告诉我这是否能解决您的问题?

关于java - RecyclerView - 根据标志实现黑白项目图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021764/

相关文章:

android - 我如何手动更新我的应用程序的回收 View ?

java - 如何在Java中解析css文件

java - 根据字符串成员对对象java进行排序

java - Java 中的局部引用优化

java - 更新 Android TextView

android - 为什么我的手机模拟的是宽屏分辨率

java - 从 MainActivity 以外的类调用 Intent

java - Firebase 实时数据库不在 Recyclerview 中显示图像

java - 资源已在 Eclipse 中加载,但未在 IntelliJ 中加载

java - Recyclerview 高度与屏幕一样大