2012-02-09 11 views
1

このカスタムビューのボタンを追加します。 このビューはAndroidのカスタムビューにボタンを追加する

setContentView(mDrawView); 

を介して表示され、私は

mDrawView.addView(mButton); 

を使用してみましたが、私の見解はaddView()関数を実装していません。 ボタンを追加する方法はありますか?ここに私の引き分けです

package com.android.connect4; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class DrawView extends View implements OnTouchListener { 

private static final int BOX_SIZE = 35; 
private Paint mPaint; 
private int mRow; 
private int mCol; 
private int mHeight; 
private GameModel mGameModel; 



public DrawView(Context context, int vHeight, int vWidth, GameModel vGameModel) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    setFocusable(true); 
    setFocusableInTouchMode(true); 

    mPaint = new Paint(); 
    mGameModel = vGameModel; 
    mPaint.setAntiAlias(true); 

    mHeight = vHeight; 

    mRow = GameModel.ROWS; 
    mCol = GameModel.COLUMNS; 
    init(); 
    setOnTouchListener(this); 
    mGameModel.attach(this); 
} 

private void init() { 
    // TODO Auto-generated method stub 
    mGameModel.UserFunction('I'); 
} 

@Override 
public void onDraw(Canvas canvas) { 

    for(int vCount = mRow-1; vCount>=0; vCount--) 
     for(int hCount = 0; hCount<mCol; hCount++) { 
      switch(mGameModel.getCellState(vCount, hCount)) { 
      case GameModel.RED: 
       mPaint.setColor(Color.RED); 
       canvas.drawCircle(hCount*BOX_SIZE+BOX_SIZE/2, mHeight-3*BOX_SIZE-vCount*BOX_SIZE+BOX_SIZE/2, BOX_SIZE/2-5, mPaint); 
       break; 
      case GameModel.BLUE: 
       mPaint.setColor(Color.BLUE); 
       canvas.drawRect(hCount*BOX_SIZE+5, mHeight-3*BOX_SIZE-vCount*BOX_SIZE+5, hCount*BOX_SIZE+BOX_SIZE-5, mHeight-3*BOX_SIZE-vCount*BOX_SIZE+BOX_SIZE-5, mPaint); 
       break; 
      case GameModel.EMPTY_CELL: 
       mPaint.setColor(Color.WHITE); 
       canvas.drawRect(hCount*BOX_SIZE+5, mHeight-3*BOX_SIZE-vCount*BOX_SIZE+5, hCount*BOX_SIZE+BOX_SIZE-5, mHeight-3*BOX_SIZE-vCount*BOX_SIZE+BOX_SIZE-5, mPaint); 
      default: 
       break; 
      } 
     } 
    mPaint.setColor(Color.WHITE); 
    mPaint.setTextSize(20); 
    String vShow = ""; 
    switch(mGameModel.getWinner()) { 
    case GameModel.RED: 
     vShow = "Red Wins!"; 
     break; 
    case GameModel.BLUE: 
     vShow = "Blue Wins!"; 
     break; 
    default: 
     switch(mGameModel.getCurrentPlayer()) { 
     case GameModel.RED: 
      vShow = "Current Player is Red"; 
      break; 
     case GameModel.BLUE: 
      vShow = "Current Player is Blue"; 
      break; 
     default: 
      break; 
     } 
    } 
    canvas.drawText(vShow, BOX_SIZE/2, (mRow+1)*BOX_SIZE, mPaint); 
} 

public DrawView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

public DrawView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 

public boolean onTouch(View arg0, MotionEvent arg1) { 
    if(arg1.getActionMasked() == MotionEvent.ACTION_DOWN) { 
    char vChar = (char) ((arg1.getRawX()/BOX_SIZE)+65); 
     mGameModel.UserFunction(vChar); 
     Log.i("DrawView", (int)arg1.getRawX()/BOX_SIZE+","+(int)(mHeight-arg1.getRawY())/BOX_SIZE); 
//  Log.i("DrawView Char", Character.toString((char) (arg1.getRawX()/BOX_SIZE+65))); 
    } 
    return true; 
} 

@Override 
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 
    // TODO Auto-generated method stub 

} 

} 
} 

このビューをXMLに添付する方法もわかりません。 setContentView(mDrawView)の代わりにXMLを使用する方が良いですか。 ?

答えて

2

ViewGroupにのみビューを追加できます。したがって、LinearLayout、RelativeLayout、ViewGroupなどのビューグループを拡張する必要があります。次に、ボタンを追加することができます。

+0

私は本当にレイアウトクラスのいずれかを拡張する必要がありますか?私はそれらのいずれかをインスタンス化し、このビュー+ボタンを内部に追加できますか? –

+0

私はLinearLayoutをインスタンス化し、内部にボタンを追加することで、自分自身を理解します。ありがとう、相棒! –

関連する問題