jmh*_*end 6 android listview view imageview android-layout
这是我的设置.我有一个ListView带有一些花哨的标题的自定义,它位于一个ViewPager.我正在维护一个已经下载并在本地存储的图像的内存缓存,就像任何自尊的开发人员一样.
我遇到的问题是,每当我使用我的方法调用setImageBitmap(Bitmap bm)时,使用缓存中的Bitmap,就会导致我的所有视图都出现.我查看了Android 源代码,发现了这个:ImageViewListViewgetView()onMeasure()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();
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以看到setImageDrawable(它被称为setImageBitmap)只要drawable具有与之前不同的尺寸,就会请求它的布局Drawable.问题是我ImageView的静态设置为60dp x 60dp,因此无论图像大小如何,其大小都不会改变.
当我滚动时,有没有办法可以不断重新测量布局?在onMeasure和onLayout调用传播自己的方式了View树,所以我ListView和ViewPager也越来越在列表中滚动的中间,这显然是导致严重的性能问题(〜100ms的UI跳转)测量.
性能很差,我需要纠正它.有人有任何解决方案?
谢谢.
已经有一段时间了,但我最近遇到了类似的问题,列表视图中的一行高度变化太大,导致调用了 listview.onmeasure 。
如果您是针对 API-14 及更高版本构建的,则可以在 SDK 源代码中设置断点。这应该有助于找出高度改变的原因。
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |