我有这样的代码:
private Bitmap disk1, disk2, disk3;
private ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();
......
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
disk2 = BitmapFactory.decodeResource(getResources(), R.drawable.disk02);
disk2 = Bitmap.createBitmap(disk2, 0, 0, origW, origH, matrix, true);
disk3 = BitmapFactory.decodeResource(getResources(), R.drawable.disk03);
disk3 = Bitmap.createBitmap(disk3, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);
bitmapArray.add(disk2);
bitmapArray.add(disk3);我认为为了优化代码,我可以不用位图(使用for循环)来使用这个构造:
bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.disk01), 0, 0, origW, origH, matrix, true));但是我有点困惑:它会存储方法的结果,或者每次尝试获取bitmapArray.get(0)时都会调用这些方法。
萨克斯
更新:我将在处理程序回调中使用后置数组来更改画布上的动画:
Bitmap item;
.......
public Handler.Callback hc = new Handler.Callback() {
public boolean handleMessage(Message msg) {
switch (msg.what) {
case 1:
if (ai == 8)
ai = 0;
item = bitmapArray.get(ai);
++ai;
break;也许这不是“优化”,我不得不说“可读性”。
抱歉,我的英语不好
发布于 2012-08-18 10:05:09
get()只需查看给定的位置并返回那里的内容。add()只是添加了传递给它的内容。
没有什么区别
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);或
bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.disk01), 0, 0, origW, origH, matrix, true));因为…的结果
Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.disk01), 0, 0, origW, origH, matrix, true));是位图,考虑是否先将其保存到Bitmap对象。这就像从瓶子里喝,你可以先把它装进玻璃里,或者直接从瓶子里喝,在这两种情况下你都喜欢可乐或者其他什么。
发布于 2012-08-18 09:35:43
请检查ArrayList添加方法的Java
添加( e)将指定的元素追加到此列表的末尾。
调用add方法时,对象将被添加到ArrayList中。
现在,当您正在检索它时,使用
get( index)返回此列表中指定位置的元素。
它将返回存储的对象,它不会调用在add方法中编写的代码。
发布于 2012-08-18 10:09:28
Collection.get返回存储在给定位置的对象。您可以调试此过程,以详细了解有关此问题的更多信息。
那句话,这个
bitmapArray.add(Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.disk01), 0, 0, origW, origH, matrix, true));是相同的
disk1 = BitmapFactory.decodeResource(getResources(), R.drawable.disk01);
disk1 = Bitmap.createBitmap(disk1, 0, 0, origW, origH, matrix, true);
bitmapArray.add(disk1);在优化方面,我相信两者都使用了几乎相同数量的内存,因为将创建一个对象并将其存储在ArrayList中。
https://stackoverflow.com/questions/12017452
复制相似问题