2013-08-29 43 views
0

我在customView中使用onDraw。我正在繪製兩條線。紅色和綠色。Android在onDraw中創建新畫布

 @Override 
    public void onDraw(Canvas canvas) 
    { 

     super.onDraw(canvas); 

      canvas.DrawLine(0, 0, 700, 200, Green); 
      canvas.DrawLine(0,0, 700, 250, Red); 
    } 

在按鈕上單擊,我想使紅線InVisible,然後單擊可見。 我可以再次重繪。我已繪製的線條,我必須使其可見和隱形

任何想法?

+0

檢查:http://stackoverflow.com/questions/15378493/how-to-partially- redraw-custom-surfaceview-using-separate-thread-without-losing – dreamcoder

回答

0

在您的自定義視圖中放置一個布爾值,並根據該線條使線條不可見/可見。設置布爾在你的onClick監聽器,如下:

public class MyView extends View { 

    boolean isVisible; 

    //constructor etc. 

    public boolean isVisible() { 
     return isVisible; 
    } 

    public void setVisible(boolean visible) { 
     isVisible = visible; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     super.onDraw(canvas); 

     canvas.drawLine(0, 0, 700, 200, Green); 

     if (isVisible) 
      canvas.drawLine(0, 0, 700, 250, Red); 

    } 
}  

和onClickListener是:

button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       myView.setVisible(!myView.isVisible()); 
       myView.invalidate(); 

      } 
     }); 
+0

這裏我們爲什麼要調用onDraw兩次?正如我所提到的,我不能重繪使其可見。如果我誤解了,請給我建議。是否重新繪製線條使其可見和隱形? – user2710860

+0

每次您必須更改視圖時,您必須使其無效並重新繪製。您可以重新繪製視圖的一部分或整個視圖,但無法在不重繪的情況下更改視圖。在你的情況下,由於視圖並不複雜,你可以使整個視圖無效而沒有任何顯着的性能成本。如果你的視圖中有很多其他的視圖,那麼你可能已經失效了只有已經改變的部分。 –

+0

是的正確!但這不是實際情況。我給了一個簡單的例子來理解。在這之後,我會把劃線劃掉,然後我就放棄這些要點。所以我不能重畫。另一種方式我可以使用兩個自定義視圖。但是我想在第一個自定義視圖(綠線)上訪問第二個自定義視圖畫布(即ReDLine畫布)。有沒有辦法通過創建對象或其他東西來訪問? – user2710860