2011-10-03 34 views
17

誰でも私に説明していいのですが、なぜonTouchEventが2回実行されていて、1回だけ実行するように設定できますか?私は説明を見つけることができませんでした。ありがとう。onTouchEventが2回実行される

@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); 
} 

答えて

34

イベントごとに実行されます。この場合、ACTION_DOWNACTION_UPというイベントが発生します。また、ACTION_MOVEイベントが何度も何度も実行されます。

それが唯一のイベントで実行する必要があり、このような何か行うには:switch文では

switch(event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_MOVE: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_UP: 
    ** CODE ** 
    break; 
} 
+0

ハイデフ、私はonTouchEventを使用して地図上のマーカーを配置しました。しかし、私は、onTOuchEventメソッドが複数回呼び出されることを発見しました。ここで説明したのと同じスイッチケースを使用しました。しかし、私のメソッドは複数回呼び出されます。なぜこれが起こっているのか教えてください。 – Scorpion

+4

Androidは、一般的にonTouchEventsのいずれかが "true"を返すまで、onTouchEventsのビューをカスケードします。タッチイベントが完全に処理され、それが停止する必要がある場合は「true」を返します。 – DeeV

+0

早速お返事をいただきありがとうございます。私はこれを試してみる。 – Scorpion

-2

を、あなたが必要としないすべてのイベントのためにfalseを返します。

+1

前のポスターと同様の例を追加しますか?それ以外の場合、このコメントは何も追加しません。 – coatless

関連する問題