Also, you should not call  this.layout(0, 0, width, height) from
onMeasure(), it will be done for you.

On Tue, Jul 7, 2009 at 3:33 PM, Carl<carl...@gmail.com> wrote:
> Excellent, thanks.
>
> On 7 July, 17:17, Jack Ha <jack...@t-mobile.com> wrote:
>> 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);
>> >         }
>>
>> > }- Hide quoted text -
>>
>> - Show quoted text -
> >
>



-- 
Romain Guy
Android framework engineer
romain...@android.com

Note: please don't send private questions to me, as I don't have time
to provide private support.  All such questions should be posted on
public forums, where I and others can see and answer them

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to