Android : how to detect drawing/swipe direction on a canvas in android?

on Wednesday, December 10, 2014


in my app i am displaying a video. When i touch and drag on the screen it has to draw a straight line and i have to get the direction of the line. My app supports only landscape mode. I could draw a straight line on touch and drag.But i dont know how to get the direction of that line. How can i do this? Given below is my code.



public class MainActivity extends Activity implements OnTouchListener {

ImageView view;
Bitmap bitmap;
Canvas canvas;
Paint paint;
float startX = 0, startY = 0, endX = 0, endY = 0, upx = 0, upy = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = (ImageView) findViewById(R.id.imageView1);
view.setOnTouchListener(this);
Display currentDisplay = getWindowManager().getDefaultDisplay();
float dw = currentDisplay.getWidth();
float dh = currentDisplay.getHeight();

bitmap = Bitmap.createBitmap((int) dw, (int) dh,
Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
paint.setColor(Color.WHITE);
view.setImageBitmap(bitmap);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
//canvas.drawLine(startX, startY, upx, upy, paint);
if(Math.abs(upx-startX)<Math.abs(upy-startY))
canvas.drawLine(startX, startY,startX, upy, paint);
else
canvas.drawLine(startX, startY,upx, startY, paint);
view.invalidate();
break;
case MotionEvent.ACTION_UP:
endX = event.getX();
endY = event.getY();
view.invalidate();
calculateDistanceAndDirection();
hideDrawing();
break;
}
return true;
}

private void hideDrawing() {
view.postDelayed(new Runnable() {
@Override
public void run() {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
view.invalidate();
}
}, 500);
}

private void calculateDistanceAndDirection() {
double dist = Math.sqrt(Math.pow((startX - endX), 2)
+ Math.pow((startY - endY), 2));
Toast.makeText(this, "distance is: " + dist, Toast.LENGTH_SHORT).show();

}


}


0 comments:

Post a Comment