I'm trying to do some simple UI stuff in a game (Basketball). I've created my own Court class (which extends ViewGroup) and I want to add a Ball (extends View) to the court.
Unfortunately my ball doesn't show up on the court, and in fact the court doesn't draw either. What have I done wrong? package test.com; import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.FrameLayout; import android.widget.LinearLayout; public class test extends Activity { /** Constants */ final int FPAR = LinearLayout.LayoutParams.FILL_PARENT; private FrameLayout main; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.addContentView(new Court(this), new LayoutParams(FPAR, FPAR)); } } package test.com; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.view.ViewGroup; public class Court extends ViewGroup { // court dimensions private int height = 0; private int width = 0; private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // ball Ball ball; public Court(Context context) { super(context); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // fix the sizes here height = this.getMeasuredHeight(); width = this.getMeasuredWidth(); this.layout(0, 0, width, height); // create a new ball ball = new Ball(this, 100, 100, 20, Color.RED); // put a ball on the court this.addView(ball); } @Override public void onDraw(Canvas canvas) { paint.setColor(Color.RED); Rect rect = new Rect(this.getLeft(), this.getTop(), width, height); canvas.drawRect(rect, paint); // tell the ball to draw itself ball.draw(canvas); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // TODO Auto-generated method stub } } package test.com; import android.graphics.Canvas; import android.graphics.Paint; import android.view.MotionEvent; import android.view.View; public class Ball extends View { private int x; private int y; private int r; private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); public Ball(Court court, int x, int y, int r, int color) { super(court.getContext()); mPaint.setColor(color); this.x = x; this.y = y; this.r = r; this.layout(this.x, this.y, this.x + (r * 2), this.y + (2 * r)); this.setOnTouchListener(this.ballTouchListener); } private OnTouchListener ballTouchListener = new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { // get the location of the click int X = (int)event.getRawX(); int Y = (int)event.getRawY(); Ball ball = (Ball)view; // do stuff, depending on what type of touch motion is occurring switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: ball.layout(X, Y, X + ball.getWidth(), Y + ball.getHeight()); break; case MotionEvent.ACTION_UP: break; } return true; } }; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(this.getLeft(), this.getTop(), this.r, mPaint); } } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Beginners" group. To post to this group, send email to android-beginners@googlegroups.com To unsubscribe from this group, send email to android-beginners-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-beginners?hl=en -~----------~----~----~----~------~----~------~--~---