2012-07-26 89 views
1

在我的android應用程序。我有一個全景視圖,在這個視圖中,我想避免只有垂直滾動。所以我使用onTouchEvent(MotionEvent event)方法禁用它。如何在android中禁用垂直滾動視圖?

聽到是代碼。

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(event.getAction()==MotionEvent.ACTION_UP){ 
     Log.d(TAG, "onTouchEvent:ACTION_UP"); 
     return false; 
    }else if(event.getAction()==MotionEvent.ACTION_DOWN){ 
     Log.d(TAG, "onTouchEvent:ACTION_DOWN");  
     return false; 
    }else{ 
     Log.d(TAG, "onTouchEvent:ACTION_UNKWON"); 
     return super.onTouchEvent(event); 
    } 

} 

但它也禁用水平滾動也怎麼解決?

回答

6

我想你誤會了ACTION_DOWNACTION_UP的概念。

ACTION_DOWN意味着當您的手指觸摸觸摸屏時,當您將手指從觸摸屏上擡起時,就是ACTION_UP

也就是說,你可以在ACTION_DOWN表明運動事件開始,在ACTION_MOVE檢查從座標觸摸事件的方向,並決定是否要阻止的運動與否,以及重置ACTION_UP的變量。

float startX 
float startY; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     startX = event.getX(); 
     startY = event.getY(); 
     break; 
    case MotionEvent.ACTION_MOVE: 
     float currentX = event.getX(); 
     float currentY = event.getY(); 

     float diffX = Math.abs(currentX - startX); 
     float diffY = Math.abs(currentY - startY); 

     // The purpose of the +100 is to make sure that we have a big enough 
     // difference between the 2 directions, eg. it's not diagonal 
     if(diffY > diffX + 100){ 
      return false; 
     } 
     break; 
    case MotionEvent.ACTION_POINTER_UP: 

     break; 
    } 

    return true; 
} 
+0

我更新米答案用一個例子 – 2012-07-26 07:19:58

+0

耶Paradx我誤解了notation.i試圖用你的代碼其工作的幫助表示感謝。 :) – 2012-07-26 08:59:51

1

我不知道應如何爲全景視圖中工作,但對其他的觀點我用GestureDetector趕滾動/一扔運動(我一般用一扔,因爲滾動是一個很短的運動):

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY){ 
    if (Math.abs(distanceY) > Math.abs(distanceX)) 
    return true;// mark the vertical scroll as handled and do nothing 
    return false; 
} 

另一種選擇是使用onTouchEvent,但是在ACTION_MOVE中必須檢測何時有垂直滾動(如paradx所述)。

希望它能幫助:)

+0

這是非常好的把戲 – 2014-12-02 04:27:27

相關問題