【发布时间】:2013-01-07 17:48:16
【问题描述】:
我正在寻找有关如何优化以下代码的想法,该代码是 for 循环的主体:
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
options.inJustDecodeBounds = false;
ImageButton view = new ImageButton(this);
view.setBackgroundColor(0);
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
finalThis.onBorderClicked(v);
}
});
view.setTag(i); //i is the loop counter
Bitmap big = BitmapFactory.decodeResource(getResources(), borders[i], options);
Bitmap smaller = Bitmap.createScaledBitmap(big, borderDimension, borderDimension, false);
view.setImageBitmap(smaller);
view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
((LinearLayout.LayoutParams)view.getLayoutParams()).setMargins(0, 0, -5, 0);
group.addView(view);
big.recycle();
基本上我有 600x600 的图像,我想让它们的大小约为 50dp。所以很自然,我先将样本大小设置为4(600 / 4 = 150),这样我就不会占用不必要的内存,然后进一步将图像缩小到指定大小。然后我用它把它加载到ImageButton上,我还回收了更大的,现在没用的Bitmap。
这是一个动态 UI 创建代码,ImageButtons 被添加到 HorizontalScrollView。问题是,在一种情况下,我必须在 UI 中添加一百多个 ImageButtons,而这段代码非常慢。
问题是:我怎样才能让它工作得更快?它目前在MainActivity 上执行,多线程(可能是AsyncTask)在这种情况下有帮助吗?还有其他方法可以更快地将位图设置为所需的大小吗?如果没有办法显着加快这个过程,那么有没有办法逐个(但以相同的顺序)逐步添加 ImageButton,以便在所有这些发生时 UI 不会冻结?
【问题讨论】:
标签: android optimization bitmap