首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android之拖沓功能

2012-07-20 
Android之拖拉功能1:ColorBall? package cn.itcast.dragdropimport android.content.Contextimport andr

Android之拖拉功能

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" ?> - <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.dragdrop" android:versionCode="1" android:versionName="1.0">- <application android:icon="@drawable/icon" android:label="@string/app_name">- <activity android:name=".MainActivity" android:label="@string/app_name">- <intent-filter>  <action android:name="android.intent.action.MAIN" />   <category android:name="android.intent.category.LAUNCHER" />   </intent-filter>  </activity>  </application>  <uses-sdk android:minSdkVersion="7" />   </manifest>

?

热点排行