我的android應用程序出現問題,它在平面上繪製函數圖。爲此,我使用自定義視圖。用戶可以通過觸摸平移座標系。在onDraw方法中,座標系和標籤直接繪製在視圖的畫布上,但是圖形本身被緩衝到一個額外的位圖上(出於執行的原因) - 在手指移動期間,這個位圖被繪製到視圖的畫布上以匹配座標系,並且只有當用戶釋放觸摸時才重新繪製功能。Android - Canvas.drawBitmap在某些設備上無法正常工作
public void onDraw(Canvas canvas){
if (start) {
bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
hCanvas = new Canvas(bitmap);
start = false;
}
drawCoordinateSystem(canvas);
drawFunctions(canvas,bitmap,hCanvas);
}
在onTouch事件偵聽器中,我調用invalidate()。有一個布爾型「移動」,對ACTION_UP設置爲true,對於ACTION_DOWN設置爲false。
public void drawFunctions(Canvas canvas,Bitmap bitmap,Canvas hCanvas){
if (moving) canvas.drawBitmap(bitmap,left+translateX,top+translateY,paint);
else {
hCanvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
//code for drawing the functions on hCanvas
canvas.drawBitmap(bitmap,0,0,paint);
}
}
在ACTION_MOVE中,我適當地計算了translateX和translateY值。
現在問題出在哪裏: 如果我爲sdk 10編譯應用程序,它在我測試過的所有設備(Android 2.2-4.2智能手機和平板電腦,虛擬和物理)上運行正常。但是,當我爲sdk 14編譯它時,對於許多設備(除了某些平板電腦,其座標系被正確繪製),它的效果很好,但包含函數的位圖不會在視圖的畫布上繪製,並且功能不可見。奇怪的是,如果我嘗試從視圖畫布中製作位圖:
Bitmap bmp = this.getDrawingCache();
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
在保存的位圖中,函數是可見的。
另一件事是 - 問題發生在i.a. Nexus 7,同時在預設的Nexus 7上創建的AVD一切正常。
可能是什麼問題?
感謝您的建議,但它仍然無法正常工作。更重要的是,位圖相當大(比屏幕更大,因此用戶可以在滾動的同時獲得實時呈現的印象),所以如果我設置ARGB8888,某些設備上存在內存問題。我使用ARGB4444來最大限度地減少內存使用量。另一件事 - 我的問題似乎只發生在Tegra設備上。在使用位圖繪製其他視圖之前,有什麼辦法可以緩衝某些內容? – user2073589 2013-02-15 17:24:06