2011-12-07 60 views
0

我有一個簡單的OnDraw()函數來改變的OnDraw()的屬性。安卓:如何通過onclickListener

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的顏色,和三個座標爲float的座標中心和半徑。

在你的onClick()方法

,更改值存在變量,然後調用無效()重繪圖像。

0

您可以使用成員變量來存儲狀態,將其更改爲onClick,並在onDraw中檢查它。

要正確連接點擊事件,請確保在構造函數中調用setOnClickListener,並在onClick中調用invalidate強制重繪。

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(); 
    } 
} 

注意,我也存儲在Paint一個成員變量mPaint。這可以防止在每個繪製週期創建新對象,並減少垃圾收集。