Dan*_* C. 3 android android-imageview
长时间读者,第一次询问,请轻轻一点;)
我有一个Android代码,在ImageView上显示大约10张图片.(在ImageView上调用setImageBitmap来设置新的位图)这会导致显示滞后,所以我试图尽可能地加速它.
我发现(使用traceview)应用程序在方法上花费了大量时间:
ViewRoot.performTraversals
View.measure
FrameLayout.onmeasure
ViewGrou.measureChildWithMargins
Run Code Online (Sandbox Code Playgroud)
我怀疑在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);
Run Code Online (Sandbox Code Playgroud)
我改变的方法,使其工作更快(可能不安全?!)
boolean layout=true;
int noL=1;
@Override
public void requestLayout() {
if (layout){
super.requestLayout();
if (noL>10){
layout=false;
}else{
noL++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我遇到类似问题时,我做了以下事情:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在更改位图setImageBitmapNoRequestLayout(...)不会调用requestLayout().
| 归档时间: |
|
| 查看次数: |
2950 次 |
| 最近记录: |