android開發–Canvas清屏只需三句話

來源:互聯網
上載者:User

      這兩三天一直在研究這個問題,今天終於成功了。我最終要實現的效果是,類似於照相機照相時,第一次按下按鍵,會出現矩形框框住人臉,這時我不想照相,再次按下會再次框出人臉,重新畫個新的矩形框。 就這麼簡單。

誤區一:我設定了一個clearDraw()的子函數,在子函數裡設定:

void clearDraw()    {        /*對畫布進行清屏*/        Canvas canvas = sh.lockCanvas();        if(canvas!=null){            Paint paint = new Paint();            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));            canvas.drawPaint(paint);            //canvas.drawColor(Color.BLUE);        }                sh.unlockCanvasAndPost(canvas);    }

      然後每次按下按鍵進行識別物體的演算法前,先進行清屏。得到的效果是,確實清屏了,但第二次畫出矩形框時,第一次的矩形框就會蹦出來了。依次類推,的確會出現短暫的清屏效果,只是最終還是不能清屏。

誤區二:

參考這裡,http://www.eoeandroid.com/thread-79664-1-1.html,我用canvas.drawLine(),也就是說將paint設定為清屏模式的paint,把所有畫的圖形用這個畫筆重新畫一次,但遺憾的是這種效果也和第一種一樣。

誤區三:

有人提議用canvas的save和restore來解決,但很遺憾根本不是這麼回事。參考:http://www.devdiv.com/article-1948-1.html

 

正確的方法是這樣的,在SurfaceView裡定義一個畫圖的方法,在這個畫圖方法的開始部分執行清屏,重點就三句話:

public void drawLine(Point p1, Point p2, Point p3)    {                    Canvas canvas = sh.lockCanvas();        canvas.drawColor(Color.TRANSPARENT);        Paint p = new Paint();        //清屏         p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));        canvas.drawPaint(p);        p.setXfermode(new PorterDuffXfermode(Mode.SRC));                p.setAntiAlias(true);        p.setColor(Color.RED);        p.setStyle(Paint.Style.FILL);        canvas.drawLine(0,0, 500, 500, p);        sh.unlockCanvasAndPost(canvas);            }

清屏:     

       Paint p = new Paint();
        //清屏
        p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
        canvas.drawPaint(p);
        p.setXfermode(new PorterDuffXfermode(Mode.SRC));

  。。。。。。。。這裡設定paint並開始自己的畫圖。。。。。。。。。
       
參考:http://stackoverflow.com/questions/4650755/clearing-canvas-with-canvas-drawcolor

          

http://blog.csdn.net/yuanlong_zheng/article/details/7592457

需要討論的,請加android每日一講qq群:248217350    歡迎大家加進來

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.