合并几个图像使android很慢

时间:2016-07-05 13:45:44

标签: java android

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

library(stringr)
res <- str_extract(df$V1, "(?<=\\/).*(?=\\/[^?]+[?])")
res[is.na(res)] <- 0
res
#[1] "cgi-bin"                  "0"                        "journal"                 
#[4] "0"                        "pede/lobortis/ligula/sit"

1 个答案:

答案 0 :(得分:0)

对于多个高分辨率的png drawable,LayerDrawable可能非常慢,因为它在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 drawables大小。如果位于错误的资源文件夹中,它们可能太大(例如,在加载密度= 3屏幕后,位于drawable /文件夹中的500x500 png将构成1500x1500)。