0

私はバッテリー ウィジェットを作成しています。さまざまなレベルに 20 の個別の PNG ファイルを持たないようにするために、20 の位置に回転する 1 つの PNG を用意しました。Android 3.x+ では、ImageView 要素が回転プロパティであるため、これは簡単です。下位互換性のために、次のように、マトリックスを使用して他の画像を生成しています。

if(Build.VERSION.SDK_INT < 11) {
        Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.battery_green);
        Matrix m = new Matrix();
        for(int i = 0; i < 20; i++) {
            String idName = "batt_s_"+i;
            int id = context.getResources().getIdentifier(idName, "id", context.getPackageName());
            m.setRotate((i * 18) - 8);
            Bitmap newBmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true);
            myViews.setImageViewBitmap(id, newBmp);
        }
    }

ただし、これは機能しません。画像自体はかなり小さいですが、これを 20 回実行するとバインダーの制限を超えてしまいます。失敗したバインダー トランザクション !!!. 生成されたビットマップの 1 つが問題なく送信されます。1 つの大きなトランザクションを 20 の個別のトランザクションに分割する方法が必要な気がします。Android 2.x でユーザーをサポートできるように、この制限を回避する方法が必要です。何かご意見は?

追加する必要があります。変更している元の PNG ファイルは、ディスク上で 903 バイトです。バインダーの制限を超えている私のトランザクションは 1,271,808 バイトです。これは、ビットマップ オブジェクトを生成すると、実際には BMP ファイルが作成されるためであり、もちろん PNG よりもサイズがはるかに大きいためだと思います。ビットマップを完全に使用しないようにする方法はありますか?

4

1 に答える 1

0

多分これは助けることができます:

これは、使用可能な小さなバインダー制限内で作業を完了するための回避策です。

https://groups.google.com/forum/#!topic/android-developers/KKEyW6XdDvg/discussion

于 2013-01-02T06:10:19.110 に答える