Java 如何在Android中将相邻位图绘制到画布?
我花了一整晚的时间试图弄明白为什么我不能用Android绘制一系列彼此完全相邻(中间没有间隙)的位图 在上下文中,我正在构建一个频谱图应用程序,它为每个进入的音频数据“窗口”显示一个垂直位图,为用户提供频率热图。目前,我正在使用预录制的音频,以便在显示任何内容之前执行所有计算-我有一个整数数组的ArrayList,每个数组表示一个窗口的位图,该位图使用计时器线程绘制到画布上 我知道,当应用程序试图画出屏幕的尺寸时,下面的方法最终会失败,但我现在不担心这一点。我想解决的问题是,下面的代码会导致绘制的位图之间出现一个像素(ish)间隙,而我实际上希望它们绝对相邻 这是我的计时器线程的run()方法:Java 如何在Android中将相邻位图绘制到画布?,java,android,bitmap,android-canvas,Java,Android,Bitmap,Android Canvas,我花了一整晚的时间试图弄明白为什么我不能用Android绘制一系列彼此完全相邻(中间没有间隙)的位图 在上下文中,我正在构建一个频谱图应用程序,它为每个进入的音频数据“窗口”显示一个垂直位图,为用户提供频率热图。目前,我正在使用预录制的音频,以便在显示任何内容之前执行所有计算-我有一个整数数组的ArrayList,每个数组表示一个窗口的位图,该位图使用计时器线程绘制到画布上 我知道,当应用程序试图画出屏幕的尺寸时,下面的方法最终会失败,但我现在不担心这一点。我想解决的问题是,下面的代码会导致绘制
public void run() {
Canvas c = null;
try {
c = sh.lockCanvas(null);
synchronized(sh) {
doDraw(c);
}
} finally {
if (c!=null) {
sh.unlockCanvasAndPost(c);
}
}
}
这是doDraw()方法,它绘制位图,然后跳到绘制的位图的末尾,以便绘制下一个位图。它只是通过增加“WindowsDrawed”字段来实现:
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(WindowsDrawed)
只需为要绘制的垂直窗口返回像素值的整数数组
这张照片看起来像是在小小的监狱里,我想把这些都扔掉
谢谢 我发现我做错了什么。“监狱栏”效应实际上是我向后台缓冲区写入增量更新的副作用,据推测,后台缓冲区每隔一段时间就会被翻转一次(因此,我的一些更新会丢失到另一个缓冲区,并显示黑色竖线)。通过确保我改为写入缓冲区位图,然后每次重新绘制整个帧,问题得到了解决。Android中不允许对屏幕进行增量更新(就像我试图做的那样)