2011-12-07 3 views
0

간단한 ondraw() 함수가 있습니다.Android : onclickListener로 ondraw()의 속성을 변경하는 방법

private class MyViewCircle extends View { 
     public MyViewCircle(Context context) { 
      super(context); 
      // TODO Auto-generated constructor stub 
     } 
     @Override 
     protected void onDraw(Canvas canvas) { 
      // TODO Auto-generated method stub 
      super.onDraw(canvas); 
      Paint paint = new Paint(); 
      paint.setAntiAlias(true); 
      paint.setColor(Color.BLACK); 
      canvas.drawCircle(20, 20, 50, 
        paint); 
     } 
    } 

잘 작동합니다. 그러나 나는 그것을 더 흥미롭게하고 싶다. onclickListener를 만듭니다. .

paint.setColor(Color.BLUE); 
canvas.drawCircle(30, 30, 50,paint); 

내 질문에 evolve.setOnClickListener (새 View.OnClickListener() {

 @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      //How to change attributes? 
     } 
    }); 

내가 버튼을 클릭 는 속성이 변경됩니다

예를 들어, 변경 사항은 다음과 같습니다 어떻게 내가 할 수있는 버튼을 클릭하면 이미지가 자동으로 다시 생성됩니다. 감사합니다.

답변

0

속성을 나타 내기 위해 일부 변수를 설정할 수 있습니다. 예를 들어, 색상에 대해 int를 설정할 수 있습니다. 및 좌표에 대한 3 개의 부동 중심과 반경.

onClick() 메서드에서 변수의 값을 변경 한 다음 invalidate()를 호출하여 이미지를 다시 그립니다.

0

멤버 변수를 사용하여 상태를 저장하고 onClick으로 변경 한 후 onDraw에서 확인할 수 있습니다.

클릭 이벤트를 올바르게 연결하려면 생성자에서 setOnClickListener으로 전화하고 invalidateonClick으로 호출하여 다시 그리도록하십시오. 나는 또한 멤버 변수 mPaintPaint를 저장

private class MyCircle extends View implements OnClickListener { 
    private boolean mDrawBlueCircle = false; 
    private Paint mPaint = new Paint(); 

    public MyCircle(Context context) { 
    super(context); 
    setOnClickListener(this); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    float x = 20; 
    float y = 20; 
    float r = 50; 
    int color = Color.BLACK; 
    if (mDrawBlueCircle) { 
     x = 30; 
     y = 30; 
     color = Color.BLUE; 
    } 
    mPaint.setColor(color); 
    canvas.drawCircle(x, y, r, mPaint); 
    } 

    @Override 
    public void onClick(View v) { 
    mDrawBlueCircle = true; 
    invalidate(); 
    } 
} 

알 수 있습니다. 이렇게하면 각 그리기주기마다 새 개체를 만들지 않아 가비지 수집을 줄일 수 있습니다.

관련 문제