私は画像編集アプリケーションでサムネイルを表示するためにRecyclerViewを使用しています。ImageView(サムネイル)とtextViewの各項目の項目。は現在選択されていますクリックするとサムネイルが表示されます.SOに関連するすべての記事は表示されますが、より良い解決策は見つかりませんでした。RecyclerViewで選択した項目を強調表示する方法
マイアダプタクラス
public class FiltersAdapter extends RecyclerView.Adapter<FiltersAdapter.ViewHolder> {
private Context mContext;
private List<Type> mDataSet;
private Uri selectedPhoto;
public enum Type {
Original,
Grayscale,
Sepia,
Contrast,
Invert,
Pixel,
Sketch,
Swirl,
Brightness,
Vignette
}
public FiltersAdapter(Context context, List<Type> dataSet, Uri selectedPhoto) {
mContext = context;
mDataSet = dataSet;
this.selectedPhoto = selectedPhoto;
}
@Override
public FiltersAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.list_item_layout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {
switch (mDataSet.get(position)) {
case Original:
holder.image.setImageResource(R.drawable.no_filter);
break;
case Grayscale:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new GrayscaleTransformation())
.into(holder.image);
break;
case Sepia:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SepiaFilterTransformation(mContext))
.into(holder.image);
break;
case Contrast:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new ContrastFilterTransformation(mContext, 2.0f))
.into(holder.image);
break;
case Invert:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new InvertFilterTransformation(mContext))
.into(holder.image);
break;
case Pixel:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new PixelationFilterTransformation(mContext, 20))
.into(holder.image);
break;
case Sketch:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SketchFilterTransformation(mContext))
.into(holder.image);
break;
case Swirl:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))
.into(holder.image);
break;
case Brightness:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new BrightnessFilterTransformation(mContext, 0.5f))
.into(holder.image);
break;
case Vignette:
Picasso.with(mContext)
.load(R.drawable.no_filter)
.transform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f),
new float[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f))
.into(holder.image);
break;
default:
holder.image.setImageResource(R.drawable.no_filter);
break;
}
holder.title.setText(mDataSet.get(position).name());
}
@Override
public void onViewAttachedToWindow(ViewHolder holder) {
super.onViewAttachedToWindow(holder);
}
@Override
public int getItemCount() {
return mDataSet.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView image;
public TextView title;
ViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.thumbnailImage);
title = (TextView) itemView.findViewById(R.id.title);
}
}
}
断片コード
horizontalFilters = (RecyclerView) mView.findViewById(R.id.rvHorizontal);
LinearLayoutManager horizontalLayoutManagaer
= new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
horizontalFilters.setLayoutManager(horizontalLayoutManagaer);
List<Type> dataSet = new ArrayList<>();
dataSet.add(Type.Original);
dataSet.add(Type.Grayscale);
dataSet.add(Type.Sepia);
dataSet.add(Type.Contrast);
dataSet.add(Type.Invert);
dataSet.add(Type.Pixel);
dataSet.add(Type.Sketch);
dataSet.add(Type.Swirl);
dataSet.add(Type.Brightness);
dataSet.add(Type.Vignette);
horizontalFilters.setAdapter(new FiltersAdapter(act, dataSet, selectedPhotoUri));
horizontalFilters.addOnItemTouchListener(new RecyclerClick(act, horizontalFilters, new RecyclerClickListener() {
@Override
public void onClick(View view, int position) {
switch (position){
case 0:
photo.setImageDrawable(drawable);
break;
case 1:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new GrayscaleTransformation())
.into(photo);
break;
case 2:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new SepiaFilterTransformation(act))
.into(photo);
break;
case 3:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new ContrastFilterTransformation(act, 2.0f))
.into(photo);
break;
case 4:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new InvertFilterTransformation(act))
.into(photo);
break;
case 5:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new PixelationFilterTransformation(act, 20))
.into(photo);
break;
case 6:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new SketchFilterTransformation(act))
.into(photo);
break;
case 7:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new SwirlFilterTransformation(act, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))
.into(photo);
break;
case 8:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new BrightnessFilterTransformation(act, 0.5f))
.into(photo);
break;
case 9:
Picasso.with(act)
.load(selectedPhotoUri)
.transform(new VignetteFilterTransformation(act, new PointF(0.5f, 0.5f),
new float[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f))
.into(photo);
break;
default:
photo.setImageDrawable(drawable);
break;
}
}
@Override
public void onLongClick(View view, int position) {
}
}));
}
あなたは何かを選択/クリックしていることを知るためにclickListenerなどがありますか? – Rahul
はい、カスタマイズされたリスナーを使用しました。そのコードを追加しますか? – musica
あなたは 'public enum Type'から 'public class Type'への変更が可能ですか? – Rahul