我正在製作一個電池小部件,並且爲了避免爲不同級別分配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 TRANSACTION !!!。 我生成的單個位圖會發送得很好,我覺得我需要一種方式來以某種方式將我的一個大事務分解爲20個單獨的事務。必須有一些解決此限制的方法,以便我可以在Android 2.x上支持我的用戶。有什麼想法嗎?
我必須添加,我正在修改的原始PNG文件是磁盤上的903字節。我的交易是吹捧活頁夾的限制是1,271,808字節。我假設這是因爲生成一個Bitmap對象實際上是創建一個BMP文件,它的大小當然比PNG大得多。有沒有一種方法可以完全避免使用位圖?
我讀過整個線程多次。我還沒有發現任何能夠幫助我的東西。我正在生成新的位圖,所以我無法使用URI,據我所知,我已經嘗試在發送位圖之前縮放位圖,並更改密度,但沒有任何效果。 – Nick
只是想知道......會在每次交易之間設置一個x毫秒的延遲幫助..? –
「Binder事務緩衝區具有有限的固定大小,當前爲1Mb,由進程中的所有事務共享。」所以延遲不應該有幫助。我真正需要的是強制事務緩衝區在我的循環的迭代之間發送和清除的方法 – Nick