2013-08-29 106 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