2016-05-26 27 views
0

Ich habe versucht, beide Bildgerüste Picasso und Glide Bilder von SD zu laden und sie in der ReceyclerView AnzeigenImageliste Artikel. Die RecyclerView Liste enthält rund 50 Elemente und mehr.Stottereffekte während der Scroll-android Picasso mit oder Glide

Immer wenn ich in der Liste nach unten scrolle, ist die sroll Bewegung nicht fließend und manchmal beginnt zu stottern, die die UX meiner Meinung nach verschlechtern. Ich lade nur Bilder von einer Disc (SD) in ein Fragment.

Für Picasso ich folgende Kode:

Picasso.with(activity.getApplicationContext()) 
    .load(Constants.ABS_PATH_USER_IMAGE + user.getPicture() + ".jpg") 
    .tag(PicassoOnScrollListener.TAG) 
    .resize(100, 100) 
    .centerCrop() 
    .transform(new CircleTransform()) 
    .placeholder(R.drawable.default_user) 
    .error(R.drawable.default_user) 
    .into(holder.thumbNail); 

Das Picasso ScrollListener wie folgt aussieht:

public class PicassoOnScrollListener extends RecyclerView.OnScrollListener { 
public static final Object TAG = new Object(); 
private static final int SETTLING_DELAY = 500; 

private static Picasso sPicasso = null; 
private Runnable mSettlingResumeRunnable = null; 

public PicassoOnScrollListener(Context context) { 
    if(this.sPicasso == null) { 
     this.sPicasso = Picasso.with(context.getApplicationContext()); 
    } 
} 

@Override 
public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) { 
    if(scrollState == RecyclerView.SCROLL_STATE_IDLE) { 
     recyclerView.removeCallbacks(mSettlingResumeRunnable); 
     sPicasso.resumeTag(TAG); 

    } else if(scrollState == RecyclerView.SCROLL_STATE_SETTLING) { 
     mSettlingResumeRunnable = new Runnable() { 
      @Override 
      public void run() { 
       sPicasso.resumeTag(TAG); 
      } 
     }; 

     recyclerView.postDelayed(mSettlingResumeRunnable, SETTLING_DELAY); 

    } else { 
     sPicasso.pauseTag(TAG); 
    } 
}} 

Um ScrollListener hinzufügen zum ReceyclerView mir folgenden haben:

myRecyclerView.addOnScrollListener(new PicassoOnScrollListener(getContext())); 

Für Glide ich einfach follwong Codebeispiel verwendet:

Glide 
    .with(mActivity.getApplicationContext()) 
    .load(Constants.ABS_PATH_USER_IMAGE + author.getPicture() + ".jpg") 
    .centerCrop() 
    .placeholder(R.drawable.default_user) 
    .crossFade() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .transform(new GlideCircleTransform(mActivity.getApplicationContext())) 
    .into(holder.thumbNailAuthor); 

Haben Sie Ideen bekam, wie eine glatte Scroll-Bewegung zu erreichen?

Antwort

1

Try

android:adjustViewBounds="true" 

in Imageview in Layout

1

Versuchen, diese zu Ihrem RecyclerView zu verwenden:

recyclerView.setHasFixedSize(true); 
recyclerView.setItemViewCacheSize(20); 
recyclerView.setDrawingCacheEnabled(true); 

Außerdem habe ich .fit() intead von .Resize verwendet() und entfernt .CenterCrop(). Jetzt funktioniert es wie ein Zauber.

Source