我尝试创建一个显示图像的RecyclerView
。我想实现一个功能,如果某些变量状态为“关闭”,则将图像项目设为黑白,否则将其保留为 RGB。
我有一个名为Player
的对象。 Player
包含:int id
、int imgAdrs
、字符串状态
。
我向 RecyclerView
传递一个包含所有玩家图像地址 allPlayers
的数组,以及一个包含所有玩家状态 mStatus
的数组。
由于我试图避免每个项目都有两张图片(一张 RGB 和第二张 BW) - 我尝试在 ViewHolder 构造函数初始化期间对 ImageView
项目应用 BW 过滤器。
但是status
变量没有传递给ViewHolder
(status
为null
),并且可见仅适用于 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/