为了制作一个简单的游戏,我使用了一个模板来绘制一个带有位图的画布,如下所示:
private void doDraw(Canvas canvas) {
for (int i=0;i<8;i++)
for (int j=0;j<9;j++)
for (int k=0;k<7;k++) {
canvas.drawBitmap(mBits[allBits[i][j][k]], i*50 -k*7, j*50 -k*7, null); } }
(画布在“SurfaceView ()”中定义/画布位于GameThread中。)
我的第一个问题是如何为新布局清除(或重画)整个画布?
第二,如何只更新屏幕的一部分?
// This is the routine that calls "doDraw":
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
if (mMode == STATE_RUNNING)
updateGame();
doDraw(c); }
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c); } } } }
发布于 2011-04-20 12:01:34
如何为新的布局清除(或重画)整个画布(=尝试游戏)?
只需调用Canvas.drawColor(Color.BLACK)
,或者您想用来清除Canvas
的任何颜色。
和:如何只更新屏幕的一部分?
没有这种方法只更新“屏幕的一部分”,因为Android操作系统在更新屏幕时会重新绘制每个像素。但是,当您不清除Canvas
上的旧图形时,旧图形仍然在表面上,这可能是“只更新屏幕的一部分”的一种方法。
所以,如果你想“更新屏幕的一部分”,只要避免调用Canvas.drawColor()
方法即可。
发布于 2012-06-04 13:37:36
使用PorterDuff clear模式绘制透明颜色可以达到我想要的效果。
Canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
发布于 2012-09-04 12:13:43
我在谷歌群组里找到了这个,这对我很有效..
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawRect(0, 0, width, height, clearPaint);
这将删除绘图、矩形等,同时保留设置的位图。
https://stackoverflow.com/questions/5729377
复制