gpt4 book ai didi

java - 合并多个图像使android非常慢

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:32 24 4
gpt4 key购买 nike

我用java为Android设备编写了一段代码,用于合并一些png图像并创建一个位图并在Imageview中显示。它可以工作,但之后应用程序会太慢。我的代码有什么问题?我认为这是内存泄漏之类的事情!这样对吗?以及如何修复代码?

 public Drawable merge(Drawable a, String uri){
Drawable[] layers = new Drawable[2];
layers[0] = a;
int imageResource = getResources().getIdentifier(uri, null, getPackageName());
layers[1] = getResources().getDrawable(imageResource);
LayerDrawable layerDrawable = new LayerDrawable(layers);
return layerDrawable.mutate();

}

public void ShowImage(ArrayList<String> states) {

img1.setImageDrawable(null);

Drawable map = getResources().getDrawable(R.drawable.emptymap);

int i = 1;
for (String state : states) {
String layerName = state;

String uri = "drawable/"+layerName;
try {
map = merge(map ,uri);
}
catch(Exception e){}
}

img1.setImageDrawable(map);
}

最佳答案

LayerDrawable 对于多个高分辨率 png 可绘制对象来说可能非常慢,因为它在其 draw() 函数中逐层绘制:

 @Override
public void draw(Canvas canvas) {
final ChildDrawable[] array = mLayerState.mChildren;
final int N = mLayerState.mNumChildren;
for (int i = 0; i < N; i++) {
final Drawable dr = array[i].mDrawable;
if (dr != null) {
dr.draw(canvas);
}
}
}

最好将LayerDrawable的发射缓存成位图,然后使用这个位图。

Bitmap bmp = Bitmap.createBitmap(layeredDrawable.getIntrinsicWidth(), 
layeredDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
layeredDrawable.setBounds(0, 0, layeredDrawable.getIntrinsicWidth(), layeredDrawable.getIntrinsicHeight());
layerDrawable.draw(new Canvas(bmp));

另一件事是要检查从资源加载 png 可绘制对象后的大小。如果放置在错误的资源文件夹中,它们可能太大(例如,加载密度 = 3 屏幕后,位于可绘制/文件夹中的 500x500 png 将构成 1500x1500)。

关于java - 合并多个图像使android非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205138/

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