1

I want to add a button for this custom view. This view is displayed via

setContentView(mDrawView);

I tried using

mDrawView.addView(mButton);

but my view does not implement the addView() function. Is there any way to add the button? here is my drawview

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

}

}
}

I don't know how to attach this view to an xml either. Is it better to use XML instead of setContentView(mDrawView); ?

1 Answer 1

2

You can only add views to ViewGroup. So will need to extend a view group like LinearLayout,RelativeLayout or ViewGroup. Then you will be able to add buttons to it.

Sign up to request clarification or add additional context in comments.

2 Comments

Do I really need to extend one of the layout classes? Can I just instantiate any of them and add this view + a button inside?
I figure it out myself, by instantiating LinearLayout and adding the buttons inside. thanks dude!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.