2011-04-18 113 views
3

即時通訊有一個應用程序需要onTouch刷卡事件,如Iphone。他們是Android的0nTouch事件問題[向下滑動並向上滑動]

  1. 向上滑動。
  2. 向下滑動。
  3. 向左滑動。
  4. 向右滑動。

我實現了onTouch事件如下。並且我正確地滑動左右行動。但是,這是實施滑動向下和向上行爲的正確方法。

mycode的:

float downXValue,downYValue; 

    @Override 
    public boolean onTouchEvent(MotionEvent arg1) { 

     // Get the action that was done on this touch event 
     switch (arg1.getAction()) 
     { 
      case MotionEvent.ACTION_DOWN: 
      { 
       // store the X value when the user's finger was pressed down 
       downXValue = arg1.getX(); 
       downYValue = arg1.getY(); 
       break; 
      } 

      case MotionEvent.ACTION_UP: 
      { 
       // Get the X value when the user released his/her finger 
       float currentX = arg1.getX(); 
       float currentY=arg1.getY(); 

       // going backwards: pushing stuff to the right 
       if (downXValue < currentX) 
       { 
        Log.d(DEBUG_TAG, "Right"); 
       } 

       // going forwards: pushing stuff to the left 
       if (downXValue > currentX) 
       { 

        Log.d(DEBUG_TAG, "Left"); 
       } 
       break; 
      } 
     } 

     //GestureListener is called here... 

     //return gestures.onTouchEvent(event); 


     return true; 
    } 

謝謝。

回答

3

怎樣......

你確定你寫上面的代碼?

編輯

好吧,我相信你。你所要做的基本上是:

double sizeInX = Math.abs(downXValue - currentX); 
double sizeInY = Math.abs(downYValue - currentY); 
if(sizeInX > sizeInY){ 
    // you better swipe horizontally 
} else { 
    // you better swipe vertically 
} 
+0

嗨crisitain感謝我已經添加了答覆,但它會導致與滑動下來,向左或向右滑動操作。它會導致2個行動。 – bHaRaTh 2011-04-18 05:36:54

+0

編輯我的答案...好運 – Cristian 2011-04-18 05:43:06

+0

您好cristain我會嘗試這個..謝謝 – bHaRaTh 2011-04-18 05:45:58

2

這是我前段時間寫的一個監聽器,它可以處理兩個下來的swype。 Theres a float oldPosition變量,我用來跟蹤觸摸位置。書中有一些不必要的代碼,但你會得到的想法:

LinearLayout tableM = (LinearLayout) findViewById (R.id.tableM); 
    tableM.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View view, MotionEvent event) { 
      if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
       oldPosition = event.getY(); 
       return true; 
      } else 
      if (event.getAction() == android.view.MotionEvent.ACTION_MOVE) { 
       if (event.getY() < oldPosition) { 
        tableIndexM++; 
        if (tableIndexM > (minsecs.length - 3)) { 
         tableIndexM = 0; 
        } 
        fillTable (rowM0, rowM1, rowM2, minsecs, tableIndexM); 
       } 
       else if (event.getY() > oldPosition) { 
        tableIndexM--; 
        if (tableIndexM < 0) { 
         tableIndexM = minsecs.length - 3; 
        } 
        fillTable (rowM0, rowM1, rowM2, minsecs, tableIndexM); 
       } 
       oldPosition = event.getY(); 
       return true; 
      } 
      return false; 
     } 
    });   
+0

嗨Aleadam謝謝你的答案..我的問題是我想要所有4事件SWIPE UP,DOWN,左右。如果我使用你的答案,將導致2行動。即上/下和左/右。 – bHaRaTh 2011-04-18 05:41:26

+0

我明白,但你仍然可以評估每個'ACTION_MOVE'事件中任何方向的mininum移動的位置/時間,並相應地採取行動,即一堆'if(event.getX> oldXPos)'...'if( event.getY()> oldYPos)'等,第一個達到你的門檻觸發行動,並重置所有的標記。 – Aleadam 2011-04-18 05:45:52

+0

感謝Aleadam聽起來不錯..我現在會嘗試。 – bHaRaTh 2011-04-18 05:47:53