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

Reply via email to