Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In onTouchEvent, ACTION_UP doesn't work

I'd like to read when a player touches the screen, and when not.

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_UP){  //ACTION UP
        actionOnUP = true;
        Log.v("MC", "Up");
    }
    if(event.getAction() == 0){ //ACTION DOWN
        actionOnUP = false;
        Log.v("MC", "Down");
    }
    Log.v("MC", event.getAction() + " ");
    return super.onTouchEvent(event);
}

This code, yes, it works, but only when player touch the screen (ACTION_DOWN), but when he don't touching the screen (ACTION_UP), nothing happens :/ LogCat

^ This is screen form LogCat. You can see: this is only ACTION_DOWN, but nothing about ACTION_UP. Class is extending View:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback {

Can you help me?

EDIT: My game is based on this tutorial: http://www.droidnova.com/2d-tutorial-series-part-v,848.html

like image 339
user1019901 Avatar asked Sep 25 '12 17:09

user1019901


People also ask

What is touch slop?

"Touch slop" refers to the distance in pixels a user's touch can wander before the gesture is interpreted as scrolling.


2 Answers

My guess is that super.onTouchEvent is returning false, as whatever superclass you're calling doesn't care about the touch event.

If you return false to onTouchEvent, then the Android OS will no longer notify you of any further events in that gesture. If you want to continue receiving touch event information (ACTION_UP for example), then you must return true to the first ACTION_DOWN event.

like image 83
Tim Avatar answered Oct 15 '22 10:10

Tim


try :

int action = event.getAction();
int code = action & MotionEvent.ACTION_MASK;
if (code == MotionEvent.ACTION_POINTER_UP || code == MotionEvent.ACTION_UP || MotionEvent.ACTION_CANCEL) {
like image 29
petey Avatar answered Oct 15 '22 09:10

petey