2016-08-22 4 views
1

Ich versuche, eine Bildbearbeitungs-App zu erstellen. Ich benutze RecyclerView in horizontaler Form, um Miniaturbilder anzuzeigen. Beim Start werden alle Miniaturansichten korrekt angezeigt, aber beim Scrollen sind einige der Miniaturansichten nicht sichtbar Die Miniaturbilder zeigen Farbeffekte, die mit der Picasso Transformations-Bibliothek implementiert wurden.beim Scrollen einige Elemente der Recycleransicht verschwinden

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"/> 

Adapter Klasse

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

In Schalter immer halten Standardfall hinzufügen, so dass Wenn nichts übereinstimmt, wird der Standardfall ausgeführt. – Nikhil

Antwort

0

Einsatz, wenn sonst Zustand Bild in Imageview zu setzen und auch Standardwerte

+0

Was ist mit dem Schalterfall falsch ?. Auch können Sie bitte Code in Ihrer Antwort geben, Bild mit zu verwenden, wenn sonst – musica

+0

Sie Schalterfälle auch benutzen können, aber vor Schalterfällen fügen Sie ein Standardbild holder.image –

+0

hinzu jetzt habe ich ein vordefiniertes Bild für thumbnail benutzt und es funktioniert fein. Früher Ich benutzte das gleiche Bild, das der Benutzer aus der Galerie auswählte, das Problem war mit der gewählten Bildgröße, nehme ich an. – musica

Verwandte Themen