これが私のセットアップです。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 に設定されているため、画像のサイズに関係なくサイズが変わらないことです。drawableDrawableImageView
スクロールするたびにレイアウトが常に再測定されるのを回避する方法はありますか? onMeasureとのonLayout呼び出しはViewツリーを上に向かって伝播しているため、リストのスクロールの途中でListViewとViewPagerも測定されており、これは明らかに重大なパフォーマンスの問題 (~100ms の UI ジャンプ) を引き起こしています。
パフォーマンスがひどいので、修正する必要があります。誰にも解決策はありますか?
ありがとう。