Tanner
Tanner

Reputation: 47

"Live" get(x) and get(Y) values (for MotionEvents) ****UPDATE****

I was wondering how to get accurate, live get(x) and get(y) values for a MotionEvent? What is happening is that when I touch a specific area on the screen, I tell an action to happen. The problem is that once I touch the screen and take my finger off, it still thinks my finger is at the same location (since that was the last location I touched). So when I have more than one Down event (for multitouch) it throws everything off. Is there a way to reset the X and Y values so when I let off the screen, they go back to 0 or null (or whatever)? Thanks

Upvotes: 0

Views: 242

Answers (2)

slayton
slayton

Reputation: 20319

What you are describing isn't a problem. You the programmer are responsible for keeping track of the touch locations and what they mean. If you care about motion you need to keep track of the previous touch and the current touch each time a touch occurs. I find something like this works great:

public int x=-1,y=-1,prevX=-1, prevY=-1;

public boolean onTouch(View v, MotionEvent event)
{
    prevX = x;
    prevY = y;      
    int x = (int)event.getX();  
    int y = (int)event.getY();

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:

        // there is no prev touch
        prevX = -1;
        prevY = -1;

        // touch down code

        break;

    case MotionEvent.ACTION_MOVE:
        // touch move code
        break;

    case MotionEvent.ACTION_UP:
        // touch up code
        break;
    }
    return true;
}

Upvotes: 1

Kevin Coppock
Kevin Coppock

Reputation: 134664

Just catch the MotionEvent.ACTION_UP or ACTION_MOVE event, depending on when the action needs to happen (since you want it live, you should use the ACTION_MOVE event). You should handle setting external variables when ACTION_DOWN occurs, and handle the results on ACTION_MOVE or ACTION_UP.

Upvotes: 0

Related Questions