我有一个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可以做的事情,但对我来说它不会,它会是什么呢?
发布于 2012-06-20 14:05:55
为了每次需要位图的内容,您可以在每次执行canvas.drawPath(.)时使用此方法:
mpath.invalidate();(我假设mpath是视图/表面视图)。
所以看起来是这样:
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();
}
}https://stackoverflow.com/questions/11120793
复制相似问题