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

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 に答える
0

ArrayListadd メソッドの 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));

最初に Bitmap オブジェクトに保存するかどうかに関係なく、Bitmap です。それはボトルから飲むようなもので、最初にグラスに注ぐか、ボトルから直接飲むことができ、どちらの場合もコーラなどを楽しむことができます.

于 2012-08-18T10:05:09.623 に答える