2014-11-17 55 views
1

所以我有一個特殊的問題給你: 當我使用移動動作時,如何捕捉按鈕?我如何處理屏幕上按鈕(或其他元素)的移動?MotionEvent的使用(ACTION_MOVE)

我用MotionEvent(ACTION_MOVE),但使用的代碼片段,我沒有得到期望的結果

在OnCreate中

btn1.setOnTouchListener(this); //for all of buttons on Activity 
在onTouch

switch(event.getAction()) { 
    case MotionEvent.ACTION_MOVE: 
     //actions 
    break; 
} 

行動將是對於從中開始移動的第一個按鈕發生。在其他情況下,什麼都不會發生

在這個時候,我認爲我可以使用ACTION_MOVE爲我的活動不爲每個按鈕或其他元素和按鈕(左上角和右下角)的保存座標arraylist。 當運動開始時,我可以比較這個座標和真實的運動座標。因此,通過這種方式,我可以知道哪些按鈕的運動。

可能我重新發明了方向盤。那爲什麼我要求你的幫助)

+0

對不起,我看到字符串,但這只是沒有意義。你想使用按鈕coördinates創建拖放?什麼? –

+0

不,我不需要拖拽(抱歉我的英文不好),我只是想知道單個動作觸動了哪些按鈕,並處理了所有這些動作。 希望,現在你明白我的意思 –

回答

0

你能解釋的更清楚嗎?從我看到你需要的可能做兩件事: 首先添加監聽器到所有按鈕,讓你的活動實現onTouchListener。
其次,您需要保存MotionEvent.ACTION_DOWN中每個按鈕的初始座標(如果我對語法正確)。
這樣你就可以訪問你的所有按鈕,並且你可以正確地保存它們的座標

+0

在評論 –

+0

從上面你可以得到你的按鈕ID時,觸摸發生,所以你會是我想。 –

+0

使用V.getId() –

0

你會在觸摸監聽器裏面看到你使用的視圖。

Button btn1 = (Button) findViewById(R.id.btn1); 
Button btn2 = (Button) findViewById(R.id.btn2); 
Button btn3 = (Button) findViewById(R.id.btn3); 

btn1.setOnTouchListener(touchListener); 
btn2.setOnTouchListener(touchListener); 
btn3.setOnTouchListener(touchListener); 

private OnTouchListener touchListener = new OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      switch (v.getId()) { 
      case R.id.btn1: 
       //Button 1 
       break; 

      case R.id.btn2: 
       //Button 2 
       break; 

      case R.id.btn3: 
       //Button 3 
       break; 
      } 
     } 
     return false; 
    } 
}; 
+0

但是,這正確地只適用於第一個移動的按鈕(如果運動從它開始),而不是所有運動發生的地方。而且我不添加案例,因爲有一個動作可以處理所有按鈕的動作動作 –