Мое приложение позволяет пользователю увеличить количество столбцов до 5. Когда столбец установлен в 1-4, кажется, что нет никакого спада.
Это приложение для галереи Android с использованием recyclerview и Glide.
Когда для столбца установлено значение 5, это означает, что рывок начинаетВстречаются
Вы можете увидеть группы красного цвета.Это когда просмотрщик прокручивается быстро.Но быстрая прокрутка на систрейсе выше (столбец 1-4) не вызывала рывков.
Я понимаю, что на экране появляется намного больше изображений, когда счетчик столбцов установлен на 5, и при быстрой прокрутке он пытается загрузить сразу столько.
Я пытался убрать все из моего макета и адаптера до минимума, чтобы добраться до этой точки, но все равно получаю рывок при увеличении до 5 столбцов.
У меня есть вопрос, что-нибудьЯ могу сделать, чтобы сделать это лучше?
GlideModule
@Override
public void applyOptions(Context context, GlideBuilder builder) {
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context)
.setMemoryCacheScreens(5)
.build();
builder.setMemoryCache(new LruResourceCache(calculator.getMemoryCacheSize()));
MemorySizeCalculator calculator2 = new MemorySizeCalculator.Builder(context)
.setBitmapPoolScreens(5)
.build();
builder.setBitmapPool(new LruBitmapPool(calculator2.getBitmapPoolSize()));
int diskCacheSizeBytes = 1024 * 1024 * 200; // 200 MB
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
builder.setDefaultRequestOptions(
new RequestOptions()
//.placeholder(getPlaceHolder())
//.error(getErrorPlaceHolder())
//todo added for emulator
//.disallowHardwareConfig()
.format(DecodeFormat.PREFER_ARGB_8888)
.diskCacheStrategy(DiskCacheStrategy.ALL));
}
Фрагмент
int spanCount = columnsCount();
GridSpacingItemDecoration spacingDecoration = new GridSpacingItemDecoration(spanCount, Measure.pxToDp(3, act), true);
rv.setHasFixedSize(true);
rv.addItemDecoration(spacingDecoration);
mLayoutManager = new GridLayoutManager(getContext(), spanCount);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (mAdapter.getAllItems().get(position).getType() == TypeItem.TYPE_HEAD){
return spanCount;
} else {
return 1;
}
}
});
rv.setLayoutManager(mLayoutManager);
mAdapter = new MediaAdapter3(getContext(), GlideApp.with(this), sortingMode(), sortingOrder());
rv.setAdapter(mAdapter);
Bindview адаптера
Key signature = new MediaStoreSignature(media.getMimeType(), media.getDateModified(), media.getOrientation());
RequestOptions options = new RequestOptions()
.signature(signature)
.centerCrop()
.placeholder(placeholder);
glide
.load(media.getUri())
.apply(options)
.thumbnail(0.1f)
.into(imageView);
Макет
<?xml version="1.0" encoding="utf-8"?>
<***.SquareRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/media_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@drawable/ripple">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="@dimen/thumb_height">
<ImageView
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:id="@+id/photo_preview"/>
</RelativeLayout>
</***.SquareRelativeLayout>