我有这段代码:
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;
也许不是称之为“优化”,我不得不说“可读性”
抱歉我的英文不好答案 0 :(得分:0)
请查看ArrayList
添加方法
添加(E e) 将指定的元素追加到此列表的末尾。
当调用add方法时,在ArrayList
中添加了对象。
现在,当您使用
进行检索时get(int index) 返回此列表中指定位置的元素。
它将返回存储的对象,它不会调用add方法
中编写的代码答案 1 :(得分:0)
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对象。 就像从瓶子里喝水一样,你可以先把它装进玻璃瓶里,或直接从瓶子里喝水,在这两种情况下你都可以享用可乐或其他任何东西。
答案 2 :(得分:0)
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中。