이미지 편집 응용 프로그램을 만들려고합니다. 이미지의 축소판을 표시하기 위해 수평으로 RecyclerView를 사용합니다. 시작시 모든 축소판이 제대로 표시되지만 스크롤하면 축소판의 일부가 표시되지 않습니다. 축소판 그림은 Picasso Transformations 라이브러리를 사용하여 구현 된 색상 효과를 보여줍니다.일부 recyclerview의 항목이 사라집니다
XML
<android.support.v7.widget.RecyclerView
android:id="@+id/horizontal_recycler_view"
android:layout_width="match_parent"
android:layout_height="90dp"
android:layout_above="@+id/rlBottom"
android:layout_below="@+id/flPhoto"
android:background="@color/grey"/>
어댑터 클래스
public class FiltersAdapter extends RecyclerView.Adapter<FiltersAdapter.ViewHolder> {
private Context mContext;
private List<Type> mDataSet;
private Uri selectedPhoto;
public enum Type {
Grayscale,
Sepia,
Contrast,
Invert,
Pixel,
Sketch,
Swirl,
Brightness,
Kuawahara,
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 Grayscale:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new GrayscaleTransformation())
.into(holder.image);
break;
case Sepia:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new SepiaFilterTransformation(mContext))
.into(holder.image);
break;
case Contrast:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new ContrastFilterTransformation(mContext, 2.0f))
.into(holder.image);
break;
case Invert:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new InvertFilterTransformation(mContext))
.into(holder.image);
break;
case Pixel:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new PixelationFilterTransformation(mContext, 20))
.into(holder.image);
break;
case Sketch:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new SketchFilterTransformation(mContext))
.into(holder.image);
break;
case Swirl:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))
.into(holder.image);
break;
case Brightness:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new BrightnessFilterTransformation(mContext, 0.5f))
.into(holder.image);
break;
case Kuawahara:
Picasso.with(mContext)
.load(selectedPhoto)
.transform(new KuwaharaFilterTransformation(mContext, 25))
.into(holder.image);
break;
case Vignette:
Picasso.with(mContext)
.load(selectedPhoto)
.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;
}
holder.title.setText(mDataSet.get(position).name());
}
@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);
}
}
}
항상 있도록 기본 케이스를 유지 아무것도 일치하지 않으면 기본 경우를 실행합니다. – Nikhil