Your Court.onDraw() function will not get called by default for efficiency. You need to call setWillNotDraw(false) to enable it.
-- Jack Ha Open Source Development Center ・T・ ・ ・Mobile・ stick together The views, opinions and statements in this email are those of the author solely in their individual capacity, and do not necessarily represent those of T-Mobile USA, Inc. On Jul 7, 5:30 am, Carl <carl...@gmail.com> wrote: > 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 -~----------~----~----~----~------~----~------~--~---