2017-03-29 10 views
0

私のアプリケーション用のギャラリーを構築しようとしています。いくつかのチュートリアルとスタックオーバーフローに続いて、私は最終的にギャラリーを作りました。私はグライドを使って画像を設定していますので、メモリが壊れたり、すべての問題が発生することはありません。唯一の問題は、私が脱出するときに、画像がそのビューに表示されるのと同じくらい速くビューに設定されないことです。ここにはgifがあります。だから私は、画像ビューが設定されている間、リサイクラーのプレースホルダーかバックグラウンドを見ることになる。飛行速度に応じて、これは500-1000msの間続くことがあります。しかし、それはギャラリーが悪く見えるようにするのに十分です。これは、飛行機を上下にスクロールするときに発生します。私の知る限りでは、これはグライドがキャッシュから画像を解放するためです。何か解決策はありますか? ここに私のコードです。グリッドレイアウトのRecyclerviewでのグライドキャッシュ管理

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>

ここでは、私は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);

は、私はSE午前方法ですアダプタ内めの設定のImageViewの:

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

私は可能な解決策を教えてください。

P.S:gifはフレームレートが低く、ゆっくりと飛ぶように見えますが、そうではありません。

答えて

0

キャッシュ管理を解決するために、私はシングルトンストアのベストプラクティスを使用します。本当にアンドロイドのための領域は、NoSqlと超高速ですが、私が通常行っているのは、現在のURLが領域にあるかどうか、アダプターチェックで領域オブジェクトを作成することです。

メインアクティビティまたはフラグメントが破壊されている場合は、すべてをレルムから削除してください。

関連する問題