2013-09-24 3 views
1

에서 사각형의 색상 변경은 내가 LinearLayout하고 난 사용자 지정보기가 : 내가 가지고있는 MainActiviy에서안드로이드 : 런타임

public class myView extends View 
{ 
    Rect rects = new Rect(30,30,80,80); 
    Canvas myCanvas; 
    @Override 
    public void onDraw(Canvas canvas)  
    { 
     myCanvas = canvas; 
     paint.setColor(Color.RED); 
     canvas.drawRect(rects, paint); 

    } 
    void changeColor() 
    { 
     paint.setColor(Color.BLUE); 
     myCanvas.drawRect(rects, paint); 
     myCanvas.invalidate(); 
    } 
} 

: 나는를 변경하려면

LinearLayout lv = (LinearLayout) View.inflate(this, R.layout.activity_main, null); 
drawView = new myView(this); 
lv.addView(drawView); 
setContentView(lv); 
Button button3 = (Button) findViewById(R.id.button3); 
button3.setOnClickListener(new View.OnClickListener() 
{ 
     @Override 
     public void onClick(View v) { 
      drawView.changeColor(); 
     } 
}); 

버튼을 클릭 한 후을 changeColor를 호출 해 구형의 색. 그러나 다른 곳에있는 새로운 직사각형이 만들어졌습니다! 저를 도와주세요?

답변

5

drawRect (보기를 무효화하기 전, onDraw) 전화를 두 번 거는 것입니다. 또한 Canvas에 대한 참조를 저장할 필요가 없습니다.


는 변수에 원하는 색상을 유지를 변경하고보기 .-

public class myView extends View { 

    private Color color = Color.RED; 

    Rect rects = new Rect(30,30,80,80); 

    @Override 
    public void onDraw(Canvas canvas) { 
     paint.setColor(color); 
     canvas.drawRect(rects, paint); 
    } 

    void changeColor() { 
     color = Color.BLUE 
     invalidate(); 
    } 
} 
+0

감사를 무효로합니다. 처음에 여러 도형을 만들고 싶다면 클릭하여 색상을 변경하고 처음으로 그릴 때가 있습니까? OnDraw에 모든 것을 넣으면 무효화 될 때마다 모두 다시 그려지는 반면, 색상 변경이 필요할 수 있습니다. – Sara

+0

글쎄, 시나리오를 구현하는 몇 가지 요인에 따라 달라집니다,하지만 모양의 수가 너무 크지 않다면, 당신은 색상과 rect의 배열로 잘해야 할 것 같아요. 0부터 rects.length까지 반복하고 각 반복마다 setColor 및 drawRect를 호출합니다. – ssantos

+0

하지만 큰 경우 좋은 방법이 아닙니다. 옳은? 캔버스 drawRect (rects, paint)를 호출하는 것은 어떨까요? 무효를 부르지 않고? – Sara

관련 문제