Here is my code, I want to detect when my finger goes down the screen so when I touch the screen I detect the ACTION_DOWN
but when I go down the screen with my finger, ACTION_MOVE
is not recognized, neither ACTION_UP
Do you know why?
float x=0;
protected void onCreate(Bundle savedInstanceState) {
do things
ImageView image2 = (ImageView) findViewById(R.id.imageView3);
image2.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction()==MotionEvent.ACTION_DOWN) {
x=arg1.getX();
}
else {
if (arg1.getAction()==MotionEvent.ACTION_MOVE){
if (arg1.getX()>x) {
do things
}
}
else {
if (arg1.getAction()==MotionEvent.ACTION_UP){
do things
}
}
}
}
If your onTouch()
method returns false
in response to the initial ACTION_DOWN
MotionEvent
, it will not receive any of the subsequent events that belong to this particular gesture. Instead those touch events will be presented to the parent in the hierarchy.
To phrase that another way, if you return false
from onTouch()
during the start of a gesture (the ACTION_DOWN
), it signals that the method no longer wants to see any more of the gesture, and that the gesture's events should go to the parent View
.
As markproxy points out in the comments below, returning false
when the MotionEvent
is anything other than an ACTION_DOWN
, such as an ACTION_MOVE
for example, will not prevent subsequent MotionEvent
s in the current gesture being presented to the View
.