Drag drop in Android

In DragDrop.java :

import android.app.Activity;

import android.os.Bundle;

import android.view.KeyEvent;

 

public class  DragDrop extends Activity {

    @Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

    System.exit(0);

return super.onKeyDown(keyCode, event);

}

 

/** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        

        // draw the view

        setContentView(new DrawView(this));

        

        

    }

    

}

In colorball.java:

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

 privateintcoordX = 0; // the x coordinate at the canvas

 privateintcoordY = 0; // the y coordinate at the canvas

 privateintid; // gives every ball his own id, for now not necessary

 privatestaticintcount = 1;

 privatebooleangoRight = true;

 privatebooleangoDown = 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() {

returncount;

}

 

void setX(int newValue) {

        coordX = newValue;

    }

 

public int getX() {

returncoordX;

}

 

void setY(int newValue) {

        coordY = newValue;

   }

 

public int getY() {

returncoordY;

}

 

public int getID() {

returnid;

}

 

public Bitmap getBitmap() {

returnimg;

}

 

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;

}

 

}

 

}

In DrawView.java:

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;

}
}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s