1:ColorBall 

package cn.itcast.dragdrop;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Point;public class ColorBall  { private Bitmap img; // the image of the ball private int coordX = 0; // the x coordinate at the canvas private int coordY = 0; // the y coordinate at the canvas private int id; // gives every ball his own id, for now not necessary private static int count = 1; private boolean goRight = true; private boolean goDown = true; public ColorBall(Context context, int drawable) {BitmapFactory.Options opts = new BitmapFactory.Options();        opts.inJustDecodeBounds = true;        img = BitmapFactory.decodeResource(context.getResources(), drawable);         id=count;count++;}public ColorBall(Context context, int drawable, Point point) {BitmapFactory.Options opts = new BitmapFactory.Options();        opts.inJustDecodeBounds = true;        img = BitmapFactory.decodeResource(context.getResources(), drawable);         id=count;count++;coordX= point.x;coordY = point.y;}public static int getCount() {return count;}void setX(int newValue) {        coordX = newValue;    }public int getX() {return coordX;}void setY(int newValue) {        coordY = newValue;   }public int getY() {return coordY;}public int getID() {return id;}public Bitmap getBitmap() {return img;}public void moveBall(int goX, int goY) {// check the borders, and set the direction if a border has reachedif (coordX > 270){goRight = false;}if (coordX < 0){goRight = true;}if (coordY > 400){goDown = false;}if (coordY < 0){goDown = true;}// move the x and y if (goRight){coordX += goX;}else{coordX -= goX;}if (goDown){coordY += goY;}else{coordY -= goY;}}}

 

2:DrawView

package cn.itcast.dragdrop;import android.content.Context;import android.graphics.Canvas;import android.graphics.Point;import android.view.MotionEvent;import android.view.View;public class DrawView extends View {   private ColorBall[] colorballs = new ColorBall[3]; // array that holds the balls   private int balID = 0; // variable to know what ball is being dragged        public DrawView(Context context) {        super(context);        setFocusable(true); //necessary for getting the touch events                // setting the start point for the balls        Point point1 = new Point();        point1.x = 50;        point1.y = 20;        Point point2 = new Point();        point2.x = 100;        point2.y = 20;        Point point3 = new Point();        point3.x = 150;        point3.y = 20;                                       // declare each ball with the ColorBall class        colorballs[0] = new ColorBall(context,R.drawable.bol_groen, point1);        colorballs[1] = new ColorBall(context,R.drawable.bol_rood, point2);        colorballs[2] = new ColorBall(context,R.drawable.bol_blauw, point3);                    }        // the method that draws the balls    @Override protected void onDraw(Canvas canvas) {        //canvas.drawColor(0xFFCCCCCC);     //if you want another background color                   //draw the balls on the canvas    for (ColorBall ball : colorballs) {            canvas.drawBitmap(ball.getBitmap(), ball.getX(), ball.getY(), null);          }    }        // events when touching the screen    public boolean onTouchEvent(MotionEvent event) {        int X = (int)event.getX();         int Y = (int)event.getY();         switch (event.getAction() ) {         case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on a ball        balID = 0;        for (ColorBall ball : colorballs) {        // check if inside the bounds of the ball (circle)        // get the center for the ball        int centerX = ball.getX() + 25;        int centerY = ball.getY() + 25;                // calculate the radius from the touch to the center of the ball        double radCircle  = Math.sqrt( (double) (((centerX-X)*(centerX-X)) + (centerY-Y)*(centerY-Y)));                // if the radius is smaller then 23 (radius of a ball is 22), then it must be on the ball        if (radCircle < 23){        balID = ball.getID();                    break;        }        // check all the bounds of the ball (square)        //if (X > ball.getX() && X < ball.getX()+50 && Y > ball.getY() && Y < ball.getY()+50){                //balID = ball.getID();                //break;                //}              }                          break;         case MotionEvent.ACTION_MOVE:   // touch drag with the ball        // move the balls the same as the finger            if (balID > 0) {            colorballs[balID-1].setX(X-25);            colorballs[balID-1].setY(Y-25);            }                    break;         case MotionEvent.ACTION_UP:        // touch drop - just do things here after dropping             break;         }         // redraw the canvas        invalidate();         return true;     }}

 

3:MainActivity

package cn.itcast.dragdrop;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new DrawView(this));    }}

 

4:

  <?xml version="1.0" encoding="utf-8" ?> - - - -                  

 

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 调用android手机微博客户端发送微博
  2. android ImageView 控件
  3. Android(安卓)TextView Marquee的应用实
  4. Android(安卓)4.0后,自定义Title报错 You
  5. Android(安卓)全屏设置
  6. Android(安卓)keytool 生成证书MD5指纹
  7. Android(安卓)应用指定浏览器开发实例
  8. TableLayout
  9. android 用UDP做的心跳连接 小示例
  10. android 圆环图形的实现