[英]How do I draw adjacent bitmaps to a canvas in Android?
我花了一整夜的時間來弄清楚為什么我不能使用Android繪制一系列彼此完全相鄰的位圖(彼此之間沒有間隙)。
就上下文而言,我正在構建一個頻譜圖應用程序,該應用程序為傳入的每個音頻數據“窗口”顯示一個垂直位圖,為用戶提供頻率的熱圖。 目前,我正在使用預先錄制的音頻,因此我可以執行所有計算,然后再顯示任何內容-我有一個由整數數組組成的ArrayList,每個數組代表一個窗口的位圖,使用計時器將其繪制到畫布上線。
我知道,當應用程序嘗試繪制屏幕尺寸時,下面的方法最終會中斷,但是我現在不必擔心。 我要解決的問題是,當我實際上希望它們絕對相鄰時,以下代碼導致繪制的位圖之間存在一個像素(ish)的間隙。
這是我的計時器線程的run()方法:
public void run() {
Canvas c = null;
try {
c = sh.lockCanvas(null);
synchronized(sh) {
doDraw(c);
}
} finally {
if (c!=null) {
sh.unlockCanvasAndPost(c);
}
}
}
這是doDraw()方法,它繪制位圖,然后跳到該繪制位圖的末尾以繪制下一個位圖。 只需通過增加“ windowsDrawn”字段即可:
private void doDraw(Canvas canvas) {
canvas.drawBitmap(spec.getBitmapWindow(windowsDrawn), 0, 1, windowsDrawn, 0, 1, h, false, null);
System.out.println("Windows drawn: "+windowsDrawn);
windowsDrawn++;
}
spec.getBitmapWindow(windowsDrawn)
僅返回要繪制的垂直窗口的像素值的整數數組。
這是顯示我在說什么的屏幕截圖。 該圖像看起來好像是在小監獄里,我想擺脫這些。
謝謝!
我發現自己在做什么錯。 “監獄條”效應實際上是我向后緩沖區寫入增量更新的副作用,這大概是每隔一段時間就會翻轉一次(因此,我的一些更新會丟失到另一個緩沖區,以黑色豎線顯示)。 通過確保我改為寫入緩沖區位圖,然后每次重新繪制整個幀,解決了該問題。 在Android中,不允許對屏幕進行增量更新(就像我試圖做的那樣)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.