これは私の設定です。私はListView
のカスタムヘッダを持っていて、それはViewPager
の中にあります。私は、ダウンロードされ、自尊心のある開発者のようにローカルに保存された画像のメモリキャッシュを維持しています。ImageViewのビットマップが設定されるたびにonMeasureとonLayoutを避ける
私がいる問題は、私はキャッシュからビットマップを使用して、私のListView
年代getView()
方法でImageView
にsetImageBitmap(Bitmap bm)
を呼び出すたびに、それはonMeasure()
に私のすべてのビューを引き起こしているということです。私は、Android ImageView
ソースコードを見て、これを見つけた:だから私はdrawable
は、その前のDrawable
よりも寸法が異なるた時はいつでも(setImageBitmap
によって呼び出される)setImageDrawable
がレイアウトを要求していることがわかります
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();
}
}
。問題は、私のImageView
が60dp x 60dpに静的に設定されているため、画像のサイズに関係なくサイズが変更されないということです。
スクロールする際にレイアウトを常に再測定できる方法はありますか? onMeasure
とonLayout
コールがView
ツリーの上に伝播しているので、リストスクロールの途中で私のListView
とViewPager
も測定されているため、明らかに重大なパフォーマンス上の問題が発生しています(約100msのUIジャンプ)。
パフォーマンスはひどいので、修正する必要があります。誰にでも解決策がありますか?
ありがとうございました。
マインド共有方法を教えてください。 – Dbl