【问题标题】:How to clear the Canvas (after drawing increasing circles) in a TextureView如何在 TextureView 中清除画布(绘制增加的圆圈后)
【发布时间】:2014-12-14 18:23:44
【问题描述】:

我正在尝试在 TextureView 中绘制越来越多的圆圈。所有圆的中心都相同。然后我尝试增加绘制的圆圈,直到达到特定限制。然后我想清除画布并重新开始。但是使用我的代码(见下文),画布似乎永远不会被清除。实际上当它应该被清除时它会很快闪烁白色,但是当下一个循环中的第一个圆圈被绘制时(在尝试清除画布之后),所有以前的圆圈重新出现并且整个动画似乎变得疯狂。让它运行几秒钟后,我留下了几十个圆圈(有些重叠),而不是每个周期只有大约 4 个。此外,它们没有我给它们的半径(基本上我的代码最终绘制了许多随机大小的圆圈)。花了几天时间尝试不同的东西,但似乎没有任何帮助。

这是我的代码:

paint.setColor(Color.argb(opac, 177, 177, 177));
            stroke = 5;
            paint.setStrokeWidth(stroke);
            radius = 10;
            Canvas canvas = new Canvas();
            Boolean clear = false;
        //Added these two lines following advice from a previous answer:
        Paint clearPaint = new Paint();
        clearPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));

        while (mRunning && !Thread.interrupted()) {

            canvas = mSurface.lockCanvas(null);
            try {   
                if(clear){
                    canvas.drawPaint(clearPaint); //This line should clear the canvas.
                    clear = false;
                }else{                      
                    canvas.drawCircle(circleX, circleY, radius, paint);
                }
            } finally {
                mSurface.unlockCanvasAndPost(canvas);
            }
            if(radius+15 <= circleY-stroke/2){
                radius+=15;
            }else{
                radius = 10;
                clear = true;
            }  
            try {
                Thread.sleep(360);
            } catch (InterruptedException e) {
                // Interrupted
            }

如果有人可以在这里帮助我,我将不胜感激。由于这个问题,我已经有好几个星期无法继续我的项目了。

【问题讨论】:

    标签: java android graphics android-canvas


    【解决方案1】:

    创建一个新的Paint Instance来清除画布

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

    在用于清除画布的 if() 块中,使用上述 Paint 实例对其进行绘制

    if(clear){
        canvas.drawPaint(clearPaint);
        clear = false;
    }
    

    【讨论】:

    • 我尝试了你的建议,但是在第一个循环之后,整个动画仍然变得疯狂,这意味着同时绘制了几个圆圈(好像重新出现),并且在此之上绘制了其他没有结构的圆圈 :( 谢谢无论如何,我对任何新想法都持开放态度
    • 那是因为圆圈被绘制在彼此的顶部。将发布示例代码。
    • 感谢您的回复。我正在准备考试,这就是为什么我最近没有太多时间。你的意思是,你要发布一个如何绘制圆圈的示例代码?如果是这样,那将非常有帮助,因为我看不出我做错了什么(对我来说,它们并没有被相互吸引)。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多