20

Can anyone explain to me why is the onTouchEvent executed twice and how can I set it to run only once? I couldn't find an explanation. Thanks.

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    _iv = new ImageView(this);

    _map = BitmapFactory.decodeResource(getResources(), R.drawable.image);

        _iv.setImageBitmap(_map);
        _iv.invalidate();

    setContentView(_iv);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    double X = event.getX();
    double Y = event.getY();

    Toast.makeText(this, "X: " + X + " Y: " + Y, Toast.LENGTH_SHORT).show();

    return super.onTouchEvent(event);
}
slybloty
  • 6,346
  • 6
  • 49
  • 70

2 Answers2

39

It executes for every event. In this case it would be for the ACTION_DOWN and ACTION_UP event. It will also execute for the ACTION_MOVE event many, many times.

To have it only execute in one event, do something like this:

switch(event.getAction())
{
  case MotionEvent.ACTION_DOWN:
    ** CODE ** 
    break;
  case MotionEvent.ACTION_MOVE:
    ** CODE ** 
    break;
  case MotionEvent.ACTION_UP:
    ** CODE **
    break;
}
DeeV
  • 35,865
  • 9
  • 108
  • 95
  • Hi Deev, I used onTouchEvent for placing marker on touch of map. But i found that onTOuchEvent method is called multiple times. I used the same switch case as described here. But still my method gets called multiple times. Can you please suggest me why this is happening – Scorpion Jul 12 '12 at 18:15
  • 7
    Android generally cascades onTouchEvents down views until one of them returns "true". Return "true" if your touch event has been fully handled and it should stop. – DeeV Jul 12 '12 at 21:35
-2

In the switch statement, return false for all the events you do not need.

user3856297
  • 273
  • 4
  • 8