私はバッテリー ウィジェットを作成しています。さまざまなレベルに 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 よりもサイズがはるかに大きいためだと思います。ビットマップを完全に使用しないようにする方法はありますか?