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

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


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

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

【问题讨论】:

    标签: android


    【解决方案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。
    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多