java - 在 RecyclerView 中更改 CircleImageView 的边框

标签 java android android-studio android-recyclerview

我有一个水平的 RecyclerView,显示用于选择“配置文件”图像的图像。

enter image description here

我正在使用 CircleImageView 使图像带有圆角,这个库可以在每个图像上放置边框。

注意一个RecyclerViewItemLayout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

   <de.hdodenhof.circleimageview.CircleImageView
       android:id="@+id/avatar_select"
       android:paddingTop="5dp"
       android:layout_width="80dp"
       android:layout_height="80dp"
       android:padding="5dp"
       app:civ_border_color="@color/colorPrimary"
       app:civ_border_width="3dp"
       android:src="@drawable/avatar1"/>

</LinearLayout>

当一个项目被点击时,CircleImageView 边框应该与 ColorAsset 的颜色匹配,当一个新项目被点击时(就好像用户改变了他或她对“个人资料”照片的看法并想要另一个),新的item 应该接收边框,旧的选择应该返回到 ColorPrimary。

注意一个RecyclerViewAdapter.java

public class AvatarAdapter extends RecyclerView.Adapter<AvatarAdapter.MyViewHolder> {

private Context mContext;
private List<Avatar> mdata;


public AvatarAdapter(Context mContext, List<Avatar> mdata) {
    this.mContext = mContext;
    this.mdata = mdata;
}


@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view;
    LayoutInflater mInflater = LayoutInflater.from(mContext);
    view = mInflater.inflate(R.layout.escolhe_avatar,parent,false);
    final MyViewHolder vHolder = new MyViewHolder(view);

    return vHolder;
}

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

    holder.image.setImageResource(mdata.get(position).getImage());

    holder.image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.image.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    holder.image.setBorderColor(R.color.colorAccent);
                }
            });
        }
    });

}

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

public static class MyViewHolder extends RecyclerView.ViewHolder {

    private CircleImageView image;
    public MyViewHolder(View itemView){
        super(itemView);

        image = (CircleImageView) itemView.findViewById(R.id.avatar_select);

    }
}

enter image description here

我已经崩溃了,我研究了但我无法找到解决方案,有人可以帮我吗?

最佳答案

利用上一个答案的逻辑,我认为每次点击时,我应该更新所有项目 execto 到接收 ColorAccent 边缘的项目。

请在 RecyclerViewAdapter.class 上使用 BindViewClass 类

 @Override
public void onBindViewHolder(@NonNull final MyViewHolder holder,  final int position) {

    holder.image.setImageResource(mdata.get(position).getImage());
    holder.image.setBorderColor(getColor(mContext, R.color.colorPrimary));

    holder.image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.image.setBorderColor(getColor(mContext, R.color.colorAccent));

            for (int i=0; i <= mdata.size(); i++){
                if (i != position){
                    notifyItemChanged(i, null);
                }

            }
        }
    });

}

关于java - 在 RecyclerView 中更改 CircleImageView 的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676920/

相关文章:

Java/JSF i18n 长文本(术语、常见问题解答)

java - 如何实现Java线程之间的共享缓冲区?

java - RxJava - 带有 concatWith 和 map 的可观察链

java - 无法从静态上下文引用非静态方法 "getActivity"

java - 具有泛型类型参数的方法可以传递泛型类型参数

java - 从jsp获取List对象值到action类

android - 屏幕录像安卓

java - 如何基于Spinner设置TextView的文字?

java - Android Studio - 不同 dpi 的像素大小

java - 无法为 ListView 设置 onItemClickListener