Изменить границу CircleImageView в RecyclerView - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть горизонтальный 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, и при нажатии на новый элемент (как если бы пользователь изменил свое мнение о фотографии «профиля» и захотел другой), новый элемент должен получить границу, а старый выбор -вернитесь в 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

Я ужесломал голову, я исследовал, но я не мог найти решение, может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Используя логику из предыдущего ответа, я подумал, что с каждым щелчком я должен обновлять все элементы execto, которые получают преимущество ColorAccent.

Veja minha classe onBindViewClassdo meu RecyclerViewAdapter.class

 @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);
                }

            }
        }
    });

}
0 голосов
/ 08 декабря 2018

если я правильно понял, что вы хотите сделать, это должно работать

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

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

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...