質問

怠zyな読み込みに関するいくつかの投稿をレビューしましたが、私の問題は少し異なると思います。

ギャラリー(私のクラスはギャラリーを拡張します)があり、20の大きさのサイズの画像(それぞれ400〜500k)を表示します。 OutFmemoryの例外を取得しているため、すべてをギャラリーにロードすることはできません。
そこで、私は20個のドローブルの配列を作成し、最初は最初の9つの要素(画像がWebから来ます)を入力し、残りのすべてをnullに設定しました。私の意図はこれでした:右に投げつけて、要素をフェッチします。 10およびnull element noに設定します。 0.右のフェッチ要素番号に別の投げno。 11およびnull要素番号に設定します。 1にヌル。左の逃亡の同じロジック。

問題は、要素がフェッチされるよりもはるかに速く逃げることができることです。私のギャラリーにはBaseadapterがあり、そのgetView()は次のようになります。

public View getView(int position, View  convertView, ViewGroup  parent){
     ImageView imageView = new ImageView();
     imageView.setDrawable(imageArray[position];
     ....
     ....

     return imageView;
}

getView()-Imagearray [Position]がまだnullである場合、「ロード...」ダイアログを表示し、設定したら同じ位置で繰り返しますか?
ImageViewが空になってから、その場でセットするのを見たくありません。 ImageViewが設定されるまでまったく表示されないようにしたいです。

ありがとう。

役に立ちましたか?

解決

ギャラリーはスムーズな体験のために設計されています。画面をブロックし、フェッチされるまで次の画像に切り替えないと、非常に悪いUIになります。このようにして、ユーザーはまったく逃げることができません。ロード中は、画像の代わりにロードインジケーターを表示する必要があります。

あなたのシナリオはかなり一般的だと思います。画像をダウンロードして表示する必要があります。 outofmemoryを取得した場合、画像をsupersampersem ビットマップオブジェクトに画像をロードしながら、奇妙なメモリの問題.

まだoffmemoryがある場合は、メモリからビットマップを削除し、SDにキャッシュする必要があります。したがって、ユーザーが戻ってくると、SDの画像を再びロードできますが、十分に速くなります。メモリ消費量は低くなります。提案するように、メモリにキャッシュされた最新の画像を10個使用し、他の画像をSDでキャッシュできます。

私のサンプルコードを見ることができます ListViewの怠zyな画像. 。実際、これはListViewアダプターですが、マイナーな変更でギャラリーに適用できます。私はそれがあなたが必要とすることを正確に行うだろうと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top