Search code examples
androidandroid-recyclerviewopacityonitemclicklistener

How to set alpha to recyclerview item except clicked one


I have a recyclerview with imageview and textview.I populate with it image and text.I have used customadapter for recyclerview.Everything working fine but now i want

1)when i click one image,all other image alpha will be set to 0.5f

Here is my code it alpha itself only

public class CatAdapter extends RecyclerView.Adapter<CatAdapter.HeroViewHolder> {

  Context mCtx;
  List<CatModel> adsList;
  int selectedPosition=-1;

  public CatAdapter(Context mCtx, List<CatModel> heroList) {
    this.mCtx = mCtx;
    this.adsList = heroList;
  }

  @NonNull
  @Override
  public HeroViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(mCtx).inflate(R.layout.cat_recycler_layout, parent, false);

    return new HeroViewHolder(view);
  }

  @Override
  public void onBindViewHolder(@NonNull final HeroViewHolder holder, int position) {
    final CatModel hero = adsList.get(position);

    Glide.with(mCtx)
      .load(hero.getImageurl())
      .into(holder.imageView);

    holder.textView.setText(hero.getName());

    holder.imageView.setOnClickListener(new View.OnClickListener() {
        int button01pos = 0;
        @Override
        public void onClick(View view) {
          if (button01pos == 0) {
            holder.cross.setVisibility(View.VISIBLE);
            holder.imageView.setAlpha(1f);
            button01pos = 1;
          } else if (button01pos == 1) {
            holder.cross.setVisibility(View.GONE);
            holder.imageView.setAlpha(1f);
            button01pos = 0;
          }
        }
      });
  }

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

  class HeroViewHolder extends RecyclerView.ViewHolder {

    ImageView cross;
    CircleImageView imageView;
    TextView textView;

    public HeroViewHolder(View itemView) {
      super(itemView);

      imageView = itemView.findViewById(R.id.imageView);
      cross = itemView.findViewById(R.id.cross);
      textView = itemView.findViewById(R.id.textView);
    }
  }
}

Solution

  • Try this way.

    public class CatAdapter extends RecyclerView.Adapter<CatAdapter.HeroViewHolder> {
    
    Context mCtx;
    List<CatModel> adsList;
    int selectedPosition=-1;
    CatModel selectedItem = null;
    
    @Override
    public void onBindViewHolder(@NonNull final HeroViewHolder holder, int position) {
        ...
        holder.imageView.setAlpha(selectedItem == null || hero.equals(selectedItem) ? 1f : 0.5f);
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                selectedItem = hero.equals(selectedItem) ? null : hero;
                ...
                notifyDataSetChanged();
            }
        });
    }
    
    ...