Android 如何清空 Canvas 清屏只需三句話


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

分類: Android開發 4269人閱讀 評論(19)收藏 舉報

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

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

[java] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">void clearDraw()  
  2.     {  
  3.         /*對畫布進行清屏*/  
  4.         Canvas canvas = sh.lockCanvas();  
  5.         if(canvas!=null){  
  6.             Paint paint = new Paint();  
  7.             paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));  
  8.             canvas.drawPaint(paint);  
  9.             //canvas.drawColor(Color.BLUE);  
  10.         }          
  11.         sh.unlockCanvasAndPost(canvas);  
  12.     }</SPAN>  


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

誤區二:

參考這里,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里定義一個畫圖的方法,在這個畫圖方法的開始部分執行清屏,重點就三句話:

[java] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">public void drawLine(Point p1, Point p2, Point p3)  
  2.     {  
  3.               
  4.         Canvas canvas = sh.lockCanvas();  
  5.         canvas.drawColor(Color.TRANSPARENT);  
  6.         Paint p = new Paint();  
  7.         //清屏   
  8.          p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));  
  9.         canvas.drawPaint(p);  
  10.         p.setXfermode(new PorterDuffXfermode(Mode.SRC));  
  11.           
  12.         p.setAntiAlias(true);  
  13.         p.setColor(Color.RED);  
  14.         p.setStyle(Paint.Style.FILL);  
  15.         canvas.drawLine(0,0500500, p);  
  16.         sh.unlockCanvasAndPost(canvas);  
  17.           
  18.     }</SPAN>  


清屏:     

       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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com