我有SurfaceView
必须在两个位图之间或之上绘制一条路径。我正在制作路径的绘图,使其看起来会变得完整。此代码可以提供我不会绘制位图。
指定位图(在onLayout(...)
中,以获取View
尺寸),如下所示:
mFrontBitmap = Bitmap.createBitmap((int) width, (int) height, mConfig);
Canvas temp = new Canvas(mFrontBitmap);
temp.drawColor(Color.TRANSPARENT, Mode.CLEAR);
(我正在擦拭它们以免遗漏任何东西。)然后SurfaceView
线程的run方法中的绘制代码是
if(mCurrentLayer==Layer.BACK) {
//draw path
if(mPath!=null)
canvas.drawPath(mPath, mPaint);
}
canvas.drawBitmap(mBackBitmap, 0, 0, null);
if(mCurrentLayer==Layer.MIDDLE) {
//draw path
if(mPath!=null)
canvas.drawPath(mPath, mPaint);
}
canvas.drawBitmap(mFrontBitmap, 0, 0, null);
if(mCurrentLayer==Layer.FRONT) {
//draw path
if(mPath!=null)
canvas.drawPath(mPath, mPaint);
}
将两条drawBitmap
行注释掉后,动画渲染效果很好。有了它们,在动画完成之前我什么都看不见,然后将路径(完整地)渲染到其中一个位图。我有些不知所措。我查看了LunarLander示例并且它正在渲染背景位图,所以这显然是SurfaceView
可以做的事情,但对我来说它不会。它可能是什么?
答案 0 :(得分:-1)
要在每次想要位图内容时绘制,每次执行canvas.drawPath(...)时都可以使用它:
mpath.invalidate();
(我假设mpath是view / surfaceview)。
所以它看起来像这样:
if(mCurrentLayer==Layer.BACK) {
//draw path
if(mPath!=null) {
canvas.drawPath(mPath, mPaint);
mPath.invalidate();
}
}
canvas.drawBitmap(mBackBitmap, 0, 0, null);
if(mCurrentLayer==Layer.MIDDLE) {
//draw path
if(mPath!=null) {
canvas.drawPath(mPath, mPaint);
mPath.invalidate();
}
}
canvas.drawBitmap(mFrontBitmap, 0, 0, null);
if(mCurrentLayer==Layer.FRONT) {
//draw path
if(mPath!=null) {
canvas.drawPath(mPath, mPaint);
mPath.invalidate();
}
}