gpt4 book ai didi

android - 每次设置 ImageView 位图时避免 onMeasure 和 onLayout

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:39 24 4
gpt4 key购买 nike

这是我的设置。我有一个自定义 ListView,带有一些花哨的 header ,它位于 ViewPager 中。我正在维护图像的内存缓存,这些图像已经下载并存储在本地,就像任何自尊的开发人员一样。

我遇到的问题是,每次我在 ListViewImageView 上调用 setImageBitmap(Bitmap bm) >getView() 方法,使用缓存中的位图,它导致我的所有 View 都为 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 调用)每当 drawable 的尺寸与其之前的尺寸不同时请求其布局 可绘制。问题是我的 ImageView 静态设置为 60dp x 60dp,因此无论图像大小如何,它的大小都不会改变。

有没有一种方法可以绕过滚动时不断重新测量的布局? onMeasureonLayout 调用在 View 树中向上传播,所以我的 ListViewViewPager 还在列表滚动的中间进行测量,这显然会导致严重的性能问题(~100 毫秒 UI 跳转)。

性能很糟糕,我需要纠正它。谁有解决办法?

谢谢。

最佳答案

已经有一段时间了,但最近我遇到了类似的问题,我的 ListView 中的一行高度变化太大,导致调用了 listview.onmeasure。

如果您是针对 API-14 及更高版本构建的,则可以在 SDK 源代码中设置断点。这应该有助于弄清楚为什么高度会发生变化。

关于android - 每次设置 ImageView 位图时避免 onMeasure 和 onLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12522990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com