2014-05-09 72 views
0

外部訪問的畫布寬度我有以下代碼:如何將的onDraw方法的安卓

Bitmap right1; 

public TicTacToe(Context context) { 
    super(context); 
    right1 = BitmapFactory.decodeResource(getResources(), R.drawable.plus); 
    int width = right1.getWidth(); 
    int height = right1.getHeight(); 
} 

@Override 
protected void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 
    canvas.drawColor(Color.WHITE); 
    right1 = Bitmap.createScaledBitmap(right1, canvas.getWidth()/3, canvas.getWidth()/3, false); 
    canvas.drawBitmap(right1, (canvas.getWidth() - (canvas.getWidth()/3)), 0, null); 
    invalidate(); 
} 

我要重新調整被稱爲「RIGHT1」基於斷什麼的畫布寬度爲位圖。我成功地做到了這一點,但是執行此操作的代碼行是onDraw方法下的第三行。這行代碼的問題是,當我只想運行一次時,它會不斷循環。理想情況下,我想將這行代碼放入TicTacToe方法中,但我不確定如何初始化TicTacToe方法中的畫布,以便我可以獲取畫布寬度。

回答

0

你不需要在構造函數中做這個東西只是在onDraw()方法中添加條件。

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawColor(Color.WHITE); 

     if(right1==null){ 
      right1 = Bitmap.createScaledBitmap(right1, canvas.getWidth()/3, canvas.getWidth()/3, false); 
      canvas.drawBitmap(right1, (canvas.getWidth() - (canvas.getWidth()/3)), 0, null); 
      invalidate(); 
     } 
    } 
+0

這樣做會更好,但代碼會一直檢查這個if語句。所以它最好在構造函數中初始化一次,並且不必在onDraw方法中檢查它。 – user2969777

+0

因爲onDraw()在無限調用中,所以一旦你繪製了,就不要調用invalidate()方法,所以我更新了代碼並將invalide()調用放入if()中,現在只會調用一次 –

+0

感謝您的幫助 – user2969777