开发者

How to place drag event on button in Android?

On my view I want to place a hidden button, and above this hidden button I want to place an image. Whenever the user drags on the ima开发者_Go百科ge the button's drag event should be called. Can any one suggest how to do this? As there is no in-built method for drag events in Android.


use this code for drag

Main.java

package com.drag;
import android.app.Activity;
import android.os.Bundle;

public class Main extends Activity{

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
{
        super.onCreate(savedInstanceState);

        // draw the view
        setContentView(new DrawView(this));


    }

}

DrawView.java

package com.drag;
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 eventaction = event.getAction(); 

        int X = (int)event.getX(); 
        int Y = (int)event.getY(); 

        switch (eventaction ) { 

        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; 

    }
}

ColorBall.java

package com.drag;
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 reached
        if (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;
        }

    }

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜