android - 在 ImageView 的 setImageBitmap 之后 onmeasure 方法上的时间太多

标签 android android-imageview

老读者了,第一次提问所以请轻声细语;)

我有一个 Android 代码可以在 ImageView 上每秒显示大约 10 张图片。 (在 ImageView 上调用 setImageBitmap 来设置新的位图) 这会导致显示滞后,所以我正在尝试尽可能加快它的速度。

我发现(使用 traceview)该应用在方法上花费了大量时间:

ViewRoot.performTraversals
View.measure
FrameLayout.onmeasure
ViewGrou.measureChildWithMargins

我怀疑 ImageView 正在测量,所以我创建了 CustomImageView 并覆盖了 onMeasure 只是为了调用 super 方法并编写 sysout。

似乎在每次 setImageBitmap onmeasure 被调用 3 次之后。 位图总是大小相同,因此没有变化。实际上,当图像源改变时它会不时改变,但只有在那时才应该重新测量。

我可以更改、覆盖、做什么来消除这种测量对应用程序速度的影响?

如果您需要更多信息,请告诉我,我会提供。

示例代码

final Bitmap bitmapScaled = Bitmap.createScaledBitmap(bitmap2, width, height, false);
imageView2.setScaleType(ScaleType.CENTER_INSIDE);
if (setSize) {
    setSize(imageView2, width, height);
}
imageView2.setImageBitmap(bitmapScaled);

我改变的方法使其工作得更快(可能不安全?!)

boolean layout=true;

int noL=1;

@Override
public void requestLayout() {
    if (layout){
        super.requestLayout();              
        if (noL>10){
            layout=false;
        }else{
            noL++;
        }
    }
}

最佳答案

当我遇到类似问题时,我做了以下操作:

public class ImageViewEx extends ImageView{
    private boolean makeRequest;
    public ImageViewEx(Context context){
        super(context);makeRequest=true;
    }
    public ImageViewEx(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public ImageViewEx(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         makeRequest=true;
    }
    public void setImageBitmapNoRequestLayout(Bitmap bitmap) {
        makeRequest = false;
        setImageBitmap(bitmap);
        makeRequest = true;
    }
    @Override public void requestLayout(){
        if(makeRequest)super.requestLayout();
    }
}

现在使用 setImageBitmapNoRequestLayout(...) 更改位图不会调用 requestLayout()

关于android - 在 ImageView 的 setImageBitmap 之后 onmeasure 方法上的时间太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719011/

相关文章:

android - ListView 中最后一项的 ImageViews 的奇怪行为

android - 使用相机后,我的 android 应用程序中的 onActivityResult 出现 NullPointerException 和 Failure Delivering Result 异常

android - 如何发送HTML格式的邮件?

android - 与服务交互的简单方法?

android - 如何在更新gridview时避免闪烁?

android - 以编程方式在另一个布局中添加布局

Android:创建 Activity 界面后调用的方法

Android循环字节码比较

Android:将位图插入到图像中。Media 总是为存储的图像获取黑色背景

java - TabLayout 图标大小未正确缩放