Увеличение количества столбцов в GridLayoutManager вызывает значительный скачок - PullRequest
0 голосов
/ 24 апреля 2018

Мое приложение позволяет пользователю увеличить количество столбцов до 5. Когда столбец установлен в 1-4, кажется, что нет никакого спада.

Это приложение для галереи Android с использованием recyclerview и Glide.

enter image description here

Когда для столбца установлено значение 5, это означает, что рывок начинаетВстречаются

enter image description here

Вы можете увидеть группы красного цвета.Это когда просмотрщик прокручивается быстро.Но быстрая прокрутка на систрейсе выше (столбец 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>
...