安卓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来绘制动画
2048游戏回顾一:使用SurfaceView创建游戏启动动画