sam*_*lem 88 android surfaceview android-canvas
为了制作一个简单的游戏,我使用了一个模板来绘制带有这样的位图的画布:
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); } }
Run Code Online (Sandbox Code Playgroud)
(画布在"run()"中定义/ 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); } } } }
Run Code Online (Sandbox Code Playgroud)
Sil*_*ria 270
使用PorterDuff清除模式绘制透明色可以实现我想要的技巧.
Canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
Run Code Online (Sandbox Code Playgroud)
Wro*_*lai 71
如何清除(或重绘)WHOLE画布以获得新布局(=在游戏中尝试)?
只需打电话Canvas.drawColor(Color.BLACK),或任何你想要清除你的颜色Canvas.
而且:我怎样才能更新屏幕的一部分?
由于Android OS在更新屏幕时重新绘制每个像素,因此没有这样的方法只更新"屏幕的一部分".但是,当你没有清除你Canvas的旧图纸时,旧的图纸仍然在表面上,这可能是"仅更新屏幕的一部分"的一种方式.
因此,如果您想"更新屏幕的一部分",请避免调用Canvas.drawColor()方法.
Ruk*_*ias 30
在谷歌小组中找到了这个,这对我有用..
Paint clearPaint = new Paint();
clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawRect(0, 0, width, height, clearPaint);
Run Code Online (Sandbox Code Playgroud)
这样可以在保持设置位图的同时删除图形矩形等.
Der*_*rzu 18
我尝试了@mobistry的答案:
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
但它对我没有用.
对我来说,解决方案是:
canvas.drawColor(Color.TRANSPARENT, Mode.MULTIPLY);
也许有人有同样的问题.
heM*_*Mac 12
mBitmap.eraseColor(Color.TRANSPARENT);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
Run Code Online (Sandbox Code Playgroud)
canvas.drawColor(Color.TRANSPARENT, Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)