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)'(據推測)將畫布放到表面上。因此,您不需要'使()'失效,但是無論如何感謝。 –