0

Я пытался как изображение каркасов Picasso и Glide загружать изображения с SD и отображать их в ImageView ReceyclerView в списке элемента. Список ReceyclerView содержит около 50 наименований и более.Заикание эффектов во время прокрутки с помощью андроида Пикассо или Glide

Всякий раз, когда я прокручиваю список, движение прокрутки не является беглым и иногда начинает заикаться, что ухудшает UX по моему мнению. Я загружаю только изображения с диска (SD) внутри фрагмента.

Для Пикассо Я использовал следующий код:

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); 

Пикассо ScrollListener выглядит следующим образом:

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); 
    } 
}} 

Чтобы добавить ScrollListener в ReceyclerView я следующее:

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

Для Glide я просто использовал follwong образец кода:

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); 

У вас есть какие-либо идеи, как добиться плавного движения прокрутки?

ответ

1

Попробуйте использовать

android:adjustViewBounds="true" 

в ImageView в макете

1

Попробуйте добавить это к вашему RecyclerView:

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

Кроме того, я использовал .Поставить() Intead из .Resize() и удален .CenterCrop(). Теперь это работает как шарм.

Source

 Смежные вопросы

  • Нет связанных вопросов^_^