我正在寻找有关如何优化以下代码的想法,该代码是 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
. 事情是,在一种情况下,我必须向ImageButtons
UI 添加一百多个,而这段代码非常慢。
问题是:我怎样才能让它工作得更快?它目前在 上执行MainActivity
,多线程(也许AsyncTask
)在这种情况下有帮助吗?还有其他方法可以更快地将位图设置为所需的大小吗?如果没有办法使这个过程显着加快,那么有没有办法逐步添加 ImageButtons(但顺序相同),以便在所有这些发生时 UI 不会冻结?