0

我有这个代码:

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;

也许它不叫“优化”,我不得不说“可读性”

对不起,我的英语不好

4

3 回答 3

0

ArrayList请查看add 方法的 Java 文档

add(E e) 将指定元素附加到此列表的末尾。

当调用 add 方法时,对象被添加到ArrayList.

现在,当您使用

get(int index) 返回此列表中指定位置的元素。

它将返回存储的对象它不会调用 add 方法中编写的代码

于 2012-08-18T09:35:43.077 回答
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));

是一个位图,无论是否先将其保存到位图对象。这就像从瓶子里喝,你可以先把它装进玻璃杯里,或者直接从瓶子里喝,在这两种情况下你都喜欢可乐或其他什么。

于 2012-08-18T10:05:09.623 回答
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 中。

于 2012-08-18T10:09:28.440 回答