2016-08-22 4 views
1

이미지 편집 응용 프로그램을 만들려고합니다. 이미지의 축소판을 표시하기 위해 수평으로 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); 
     } 
    } 
} 
+0

항상 있도록 기본 케이스를 유지 아무것도 일치하지 않으면 기본 경우를 실행합니다. – Nikhil

답변

0

사용하는 다른 조건이 이미지 뷰에 사진을 설정하고 또한 기본 값을 추가 할 경우 스위치에서

+0

스위치 케이스에 문제가 있습니까? 또한 당신이 스위치 케이스를 사용할 수있는 다른 경우 – musica

+0

을 사용하여 이미지를 설정하는 당신의 대답에 코드를 주실 수 있습니까? 스위치 케이스가 holder.image –

+0

에 기본 이미지를 추가하기 전에 미리보기 이미지 용으로 미리 정의 된 이미지를 사용하고 있습니다. 나는 사용자가 갤러리에서 선택한 동일한 이미지를 사용하고 있었고, 문제는 선택한 이미지의 크기와 같았습니다. – musica

관련 문제