我正在制作一个电池小部件,为了避免不同级别有 20 个单独的 PNG 文件,我有一个 PNG,我将其旋转到 20 个位置。在 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 次超过了活页夹限制,我得到了!Binder 交易失败!!!我生成的一个位图可以很好地发送,我觉得我需要一种方法以某种方式将我的一个大交易分成 20 个单独的交易。必须有办法绕过这个限制,这样我才能在 Android 2.x 上支持我的用户。有什么想法吗?
我必须补充一点,我正在修改的原始 PNG 文件在磁盘上是 903 字节。我的超出绑定限制的交易是 1,271,808 字节。我假设这是因为生成 Bitmap 对象实际上是创建了一个 BMP 文件,它的大小当然比 PNG 大得多。有没有办法完全避免使用位图?