OnTouchEvent Android

Un metodo onTouchEvent riceve le informazioni relative al singolo evento in un oggetto MotionEvent e predispone una reazione sulle
coordinate del display in cui è avviene l’evento touch.
Quando si verifica il tocco su una vista, l’oggetto MotionEvent conterrà un tipo di azione ACTION_DOWN.  Quando il tocco viene sollevato dallo schermo, viene generato un evento ACTION_UP. Se il tocco di muove  senza staccarsi dallo schermo,viene generato un evento ACTION_MOVE.
Andiamo a creare un disegno con shape:


LinearLayout:

Adesso andiamo a definire il nostro mainJava:
package com.mycompany.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.*;
public class MainActivity extends Activity {

ViewGroup mLayout;
ImageView mImage;
int xd;
int yd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLayout =  findViewById(R.id.mLayout);
mImage = findViewById(R.id.mImage);
mImage.setOnTouchListener(onTouchListener());
}
private OnTouchListener onTouchListener() {
return new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e)

{
final int x = (int) e.getX();
final int y = (int) e.getY();

switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
LinearLayout.LayoutParams mParams = (LinearLayout.LayoutParams)
view.getLayoutParams();
xd = x -mParams.leftMargin;
yd = y -mParams.topMargin;

break;
case MotionEvent.ACTION_MOVE:
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)
view.getLayoutParams();
layoutParams.leftMargin = x -xd;
layoutParams.topMargin= y -yd;

view.setLayoutParams(layoutParams);
break;
}
mLayout.invalidate();
return true;
}
};
}
}

Come vedete il nostro rettangolo si muove in tutte le direzioni.
A presto!!!