安卓SurfaceView动画

5
我想在SurfaceView上实现动画效果。但是,我的SurfaceView的背景是透明的,我无法清除上一帧的像素。 我能否在透明的SurfaceView上实现一些动画效果?也许我只需要在视图上使用“Animation”类。 谢谢!
也许我没有清楚地描述问题。我想实现一种动画效果,但是SurfaceView不能刷新上一个图形。它看起来像图片。
背景是透明的。我知道用颜色绘制画布可以清除上次绘制的图形。但是它的背景是透明的,这种方法无法实现刷新。 请帮帮我。谢谢!
2个回答

9
请看下面的代码,它适用于我:

观察以下代码,它对我有效:

Paint clearPaint = new Paint();

public MySurfaceView(Context context, AttributeSet attrs) {
    super(context, attrs);

    this.setZOrderOnTop(true);
    this.getHolder().setFormat(PixelFormat.TRANSPARENT);
    clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}

public void drawMethod(){
    Canvas canvas = this.getHolder().lockCanvas();

    canvas.drawPaint(clearPaint);

    canvas.drawBitmap(yourBitmap, null, yourBitmapRect, null);

    this.getHolder().unlockCanvasAndPost(canvas);
}

您需要将SurfaceView放在Z顺序的顶部,并将PixelFormat设置为透明。这将使您的SurfaceView透明(您已经完成了这一部分,因为您已经写过了)。 然后,在每次新绘制之前,您需要使用透明涂料填充您的表面。这个“特殊”的涂料需要这样设置:

clearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));

谢谢,您的回答对我很重要。 - Sea turtle
太棒了!永远不要忘记设置setZOrderOnTop(true)! - Lcsky
更准确地说,clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 因为有一个 AvoidXfermode.Mode,所以在导入时要小心或明确写出 PorterDuff.Mode.CLEAR - Juan T

3

在每次绘制前,您可以尝试使用canvas.drawColor(Color.BLACK)来清空画布。


这实际上是来自Android文档的推荐方法,+1。 - soren.qvist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接