首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何清除(删除)画布(=位图),生活在surfaceView中?

如何清除(删除)画布(=位图),生活在surfaceView中?
EN

Stack Overflow用户
提问于 2011-04-20 19:19:35
回答 21查看 166K关注 0票数 100

为了制作一个简单的游戏,我使用了一个模板来绘制一个带有位图的画布,如下所示:

代码语言:javascript
复制
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中。)

我的第一个问题是如何为新布局清除(或重画)整个画布?

第二,如何只更新屏幕的一部分?

代码语言:javascript
复制
// 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);  }   }   }       }
EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2011-04-20 20:01:34

如何为新的布局清除(或重画)整个画布(=尝试游戏)?

只需调用Canvas.drawColor(Color.BLACK),或者您想用来清除Canvas的任何颜色。

和:如何只更新屏幕的一部分?

没有这种方法只更新“屏幕的一部分”,因为Android操作系统在更新屏幕时会重新绘制每个像素。但是,当您不清除Canvas上的旧图形时,旧图形仍然在表面上,这可能是“只更新屏幕的一部分”的一种方法。

所以,如果你想“更新屏幕的一部分”,只要避免调用Canvas.drawColor()方法即可。

票数 81
EN

Stack Overflow用户

发布于 2012-06-04 21:37:36

使用PorterDuff clear模式绘制透明颜色可以达到我想要的效果。

代码语言:javascript
复制
Canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
票数 285
EN

Stack Overflow用户

发布于 2012-09-04 20:13:43

我在谷歌群组里找到了这个,这对我很有效..

代码语言:javascript
复制
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawRect(0, 0, width, height, clearPaint); 

这将删除绘图、矩形等,同时保留设置的位图。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5729377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档