2011-12-07 21 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を作成します。私はボタンをクリックすると evolve.setOnClickListener(新しいView.OnClickListenerは(){

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

、属性が変更されます例えば、

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

が私の質問です:どのようにできました私はボタンをクリックすると、画像が自動的に再生成されたのでしょうか?これを実装しています。ありがとう!

答えて

0

あなたがそこに属性をいくつかの変数が表すように設定することができ、例えば、あなたのケースでは、あなたは色のint型を設定することができ、座標は3つのフロート中心と半径。あなたのonClick()メソッドで

、そこに変数の値を変更し、イメージを再描画する()無効化を呼び出します。

0

メンバー変数を使用して状態を保存し、onClickに変更し、onDrawにチェックインできます。

clickイベントを正しく接続するには、コンストラクタで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(); 
    } 
} 

注意してください。これにより、描画サイクルごとに新しいオブジェクトが作成されるのを防ぎ、ガベージコレクションを減らします。

関連する問題