Bu benim kurulumumdur. ViewPager
'un içinde bulunan bazı süslü başlıkları olan bir özel ListView
var. Kendine saygılı bir geliştirici gibi yerel olarak indirilmiş ve depolanmış görüntülerin bir bellek önbelleğini koruyorum.Her zaman onLeft ve onLayout'tan kaçının ImageView Bitmap ayarı
yaşadığım sorun, bu onMeasure()
benim bütün Görüntüleme neden oluyor önbellekten bir Bitmap kullanarak, benim ListView
'ın getView()
yönteminde ImageView
üzerinde setImageBitmap(Bitmap bm)
dediğimiz her şey budur. Ben Android ImageView
kaynak koduna göz baktı ve bu tespit ettik: Ben drawable
önceki Drawable
daha değişik, geldiğinde de hep (setImageBitmap
tarafından çağrılan) setImageDrawable
düzenini talep ettiğini görebilirsiniz
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();
}
}
. Sorun şu ki, ImageView
, 60dp x 60dp'ye statik ayarlanmış olduğundan, boyutu, görüntünün boyutuna bakılmaksızın değişmeyecek.
Kaydırırken sürekli olarak yeniden düzenlenmiş düzenlerin etrafında dolaşabileceğim bir yol var mı? onMeasure
ve onLayout
çağrıları View
ağacına doğru ilerliyor, bu nedenle ListView
ve ViewPager
adreslerim de liste kaydırma işleminin ortasında ölçülüyor, bu da ciddi performans sorunlarına neden oluyor (~ 100 ms UI atlar).
Performans kötüyse ve düzeltmem gerekiyor. Herhangi bir çözümü olan var mı?
Teşekkürler.
aklını nasıl paylaştığını paylaşıyor musunuz? – Dbl