【发布时间】:2011-10-14 22:53:33
【问题描述】:
只是想知道在画布上绘制位图最快的方法是什么?
目前我有一个位图(和用于绘图的画布),我用它来双缓冲绘图调用,然后当我绘制到画布时,通过应用 1px 画布平移来产生滚动效果。仅此一项就可以将帧率从 60+ FPS 降低到 ~40,非常受欢迎。我目前没有使用surfaceView(或GLSurfaceView),只是想知道我是否遗漏了任何可以提高速度的东西。 onDraw() 代码如下
@Override
public void onDraw(Canvas canvas)
{
//update fps text
mFpsTracker.frameTouch();
if(mBufferedBitmap == null)
{
mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
mBufferedCanvas = new Canvas(mBufferedBitmap);
}
paint.setColor(Color.BLUE);
mBufferedCanvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
mBufferedCanvas.translate(0, -1);
canvas.drawBitmap(mBufferedBitmap, 0, 0, null);
//draw fps
mTextPaint.setColor(Color.WHITE);
canvas.drawText(mFpsTracker.getFPSString(), 40, 40, mTextPaint);
invalidate();
}
【问题讨论】:
-
如果有人对使用 SurfaceView 感兴趣,可以将此代码提高大约 10-15FPS
-
我很纳闷,SurfaceView到底是什么东西可以神奇地提升性能?或者您可能以不同的方式使用 SurfaceView - 例如,我希望 RGB_565 在大多数设备上绘制速度更快。
-
绘图是在 SurfaceView developer.android.com/reference/android/view/SurfaceView.html 的 UI 线程中完成的
-
更正,允许在不同的线程上完成。 SurfaceView 不需要启动一个新线程。即使确实如此,引入新线程也不能自动保证给定任务的更好性能。
-
你也在
onDraw()内部调用invalidate()
标签: android graphics canvas bitmap