安卓surfaceview动画

Posted

技术标签:

【中文标题】安卓surfaceview动画【英文标题】:Android surfaceview animation 【发布时间】:2011-11-15 23:08:58 【问题描述】:

我正在尝试在表面视图上实现动画。但是,我的表面视图的背景是透明的,我无法清除最后一帧的像素。 我可以在透明表面视图上实现一些动画吗?也许我只在视图上使用“动画”类。 谢谢!


也许我没有清楚地描述这个问题。我想实现一个动画,但是surfaceview无法刷新上一张图。看起来像图片。

背景是透明的。我知道用颜色绘制画布可以清理最后绘制的图形。但是它的背景是透明的,该方法没有实现刷新。 请帮我。谢谢!

【问题讨论】:

【参考方案1】:

观看以下代码,它对我有用:

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));

【讨论】:

谢谢,您的回答对我很重要。 很好的答案!永远不要忘记 setZOrderOnTop(true)! 更准确地说是clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));,因为有一个AvoidXfermode.Mode,所以在导入时要小心或写明确的PorterDuff.Mode.CLEAR【参考方案2】:

你可以在每次draw()开始时尝试canvas.drawColor(Color.BLACK)

【讨论】:

这实际上是android文档中推荐的方法,+1。

以上是关于安卓surfaceview动画的主要内容,如果未能解决你的问题,请参考以下文章