これが私のセットアップです。ListView
の中にあるいくつかの派手なヘッダーを持つカスタムがありViewPager
ます。私は、自尊心のある開発者が行うように、ダウンロードしてローカルに保存した画像のメモリ キャッシュを維持しています。
私が抱えている問題は、キャッシュからビットマップを使用して のメソッドで を呼び出すたびにsetImageBitmap(Bitmap bm)
、ImageView
すべてListView
のgetView()
ビューがonMeasure()
. AndroidのImageView
ソースコードを調べたところ、次のことがわかりました。
public void setImageDrawable(Drawable drawable) {
if (mDrawable != drawable) {
mResource = 0;
mUri = null;
int oldWidth = mDrawableWidth;
int oldHeight = mDrawableHeight;
updateDrawable(drawable);
if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
requestLayout();
}
invalidate();
}
}
したがって、 が以前のと異なる寸法を持っている場合はいつでも、 setImageDrawable
(によって呼び出されるsetImageBitmap
) がそのレイアウトを要求することがわかります。問題は、myが静的に 60 dp x 60 dp に設定されているため、画像のサイズに関係なくサイズが変わらないことです。drawable
Drawable
ImageView
スクロールするたびにレイアウトが常に再測定されるのを回避する方法はありますか? onMeasure
とのonLayout
呼び出しはView
ツリーを上に向かって伝播しているため、リストのスクロールの途中でListView
とViewPager
も測定されており、これは明らかに重大なパフォーマンスの問題 (~100ms の UI ジャンプ) を引き起こしています。
パフォーマンスがひどいので、修正する必要があります。誰にも解決策はありますか?
ありがとう。