2011-10-03 180 views
17

任何人都可以向我解釋爲什麼onTouchEvent執行兩次,我如何將它設置爲只運行一次?我找不到解釋。謝謝。onTouchEvent執行兩次

@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(event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_MOVE: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_UP: 
    ** CODE ** 
    break; 
} 
+0

嗨Deev,我用onTouchEvent將標記放在地圖上。但是我發現onTOuchEvent方法被多次調用。我使用了與此處所述相同的開關盒。但是我的方法仍然被多次調用。你能否建議我爲什麼會發生這種情況 – Scorpion

+4

Android通常在onTouchEvents下視圖級聯,直到其中一個返回「true」。如果您的觸摸事件已完全處理,並且應該停止,則返回「true」。 – DeeV

+0

好的。感謝您的快速回復。我會試試這個。 – Scorpion

-2

在switch語句,因爲你並不需要的所有事件返回false。

+1

添加與上一張海報相似的示例嗎?否則,這個評論什麼都不加。 – coatless