Je suis en train de construire une galerie pour mon application. Après quelques tutoriels et stackoverflow, j'ai finalement réussi à faire de la galerie. J'utilise Glide pour définir des images, donc pas de problème de mémoire s'écraser et tout. Le seul problème est, lorsque je lance, les images ne sont pas définies dans leurs vues aussi vite que ces vues sont affichées. Voici un gif. Donc, je peux voir les espaces réservés ou l'arrière-plan du recyclerview pendant que les images sont en train d'être définies. Selon la vitesse de lancement, cela peut durer de 500 à 1000 ms. Mais cela suffit à rendre la galerie mauvaise. Cela se produit lorsque j'utilise Fling pour faire défiler vers le haut ou vers le bas. À ma connaissance, c'est parce que le glide libère les images de son cache. Y a-t-il une solution pour cela? Voici mon code.Glide Cache gestion dans Recyclerview avec mise en page grille
activity_gallery:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_monuments"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".GalleryActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_gallery"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:alwaysDrawnWithCache="true"
android:clipToPadding="false"
android:scrollbars="vertical"
android:scrollbarStyle="insideOverlay"/>
</LinearLayout>
Voici comment je suis en train recyclerview:
RecyclerView gridView = (RecyclerView)findViewById(R.id.recyclerview_gallery);
gridView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),NUM_OF_COLUMNS);
gridView.setLayoutManager(layoutManager);
gridView.isDrawingCacheEnabled();
gridView.addItemDecoration(new MarginDecoration(GalleryActivity.this, NUM_OF_COLUMNS, GRID_PADDING, true));
gridView.setHasFixedSize(true);
gridView.setVerticalScrollBarEnabled(true);
gridView.setBackgroundColor(getResources().getColor(R.color.colorBlack));
GalleryAdapter galleryAdapter = new GalleryAdapter(GalleryActivity.this, GalleryActivity.this, ImageNamesList, columnWidth);
gridView.setAdapter(galleryAdapter);
Voici comment je suis soi Prép imageview adaptateur:
viewHolder.galleryImage.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth));
Glide.with(context)
.load(uri)
.asBitmap()
.placeholder(R.drawable.monument)
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(viewHolder.galleryImage);
S'il vous plaît laissez-moi savoir des solutions possibles. P.S.: Le GIF est une vitesse de trame basse et montre donc le fling lent qui n'est pas le cas.