安卓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动画的主要内容,如果未能解决你的问题,请参考以下文章

自定义 View 动画比自定义 SurfaceView 动画更流畅?

Android中使用SurfaceView和Canvas来绘制动画

SurfaceView为什么不能做动画?

2048游戏回顾一:使用SurfaceView创建游戏启动动画

安卓——SurfaceView。在不清除屏幕的情况下更新。 (注:我是菜鸟)

用surfaceView实现高性能动画