1
我有一个SurfaceView
,它必须在两个位图之间或之上绘制一条路径。我将动画绘制路径,以使其看起来变成全尺寸。此代码的工作原理提供我不绘制位图。Canvas#drawBitmap正在挫败Canvas#在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
可以做的,但对我来说它不会。会是什么呢?
'mPath'实际上是一个'Path'对象; 'Path'中没有'invalidate()'方法。 'SurfaceView'有一个'SurfaceHolder',而不是像''View''一样从'onDraw()'绘图,你运行一个调用'Canvas canvas = mSurfaceHolder.lockCanvas()'的线程,它可以让你在'Canvas'目的;然后在最后调用'mSurfaceHolder.unlockCanvasAndPost(canvas)'(据推测)将画布放到表面上。因此,您不需要'使()'失效,但是无论如何感谢。 –