2014-06-09 73 views
-7

下面是代碼示例:機器人onInterceptTouchEvent()的問題

public class SwipeRelativeLayout extends RelativeLayout { 

private String TAG = "SwipedListView"; 
private MotionEvent previous = null; 
private MotionEvent start = null; 

public SwipeRelativeLayout(Context context) { 
    super(context); 
} 

public SwipeRelativeLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    int action = ev.getAction(); 

    String eventType = ""; 
    switch (action) 
    { 
     case MotionEvent.ACTION_CANCEL: 
     { 
      eventType = "ACTION_CANCEL"; 
     } break; 

     case MotionEvent.ACTION_DOWN: 
     { 
      eventType = "ACTION_DOWN"; 
     } break; 

     case MotionEvent.ACTION_UP: 
     { 
      eventType = "ACTION_UP"; 
     } break; 

     case MotionEvent.ACTION_MOVE: 
     { 
      eventType = "ACTION_MOVE"; 
     } break; 
    } 

    Log.e(TAG, "onInterceptTouchEvent() Type = " + eventType + " X = " + Float.toString(ev.getRawX()) + " Y = " + Float.toString(ev.getRawY())); 

    return true; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    String eventType = ""; 
    switch (action) 
    { 
     case MotionEvent.ACTION_CANCEL: 
     { 
      eventType = "ACTION_CANCEL"; 
     } break; 

     case MotionEvent.ACTION_DOWN: 
     { 
      eventType = "ACTION_DOWN"; 
     } break; 

     case MotionEvent.ACTION_UP: 
     { 
      eventType = "ACTION_UP"; 
     } break; 

     case MotionEvent.ACTION_MOVE: 
     { 
      eventType = "ACTION_MOVE"; 
     } break; 
    } 

    Log.e(TAG, "onTouchEvent() Type = " + eventType + " X = " + Float.toString(event.getRawX()) + " Y = " + Float.toString(event.getRawY())); 

    return false; 
} 
} 

有人能解釋一下,爲什麼我可以看到onle ACTION_DOWN事件到onInterceptTouchEvent()? 如已在developers.android.com

在3點告誡,只要你從這個功能,每個以下事件返回false(截至及包括最後上)將首先在這裏交付和然後到目標的onTouchEvent()。

我做了這個,但還是老樣子看不到事件到onInterceptTouchEvent(),除了ACTION_DOWN

+0

即使你感到沮喪,你問題的語氣也需要專業。其他任何事情都不合適,並會降低獲得你想要的答案的可能性。 – Flexo

+0

抱歉,對於標題,但andriod中的觸摸事件是複雜的,特別是onIntercept()。在www的android中沒有關於觸摸處理的明確解釋,即使在developers.android.com –

+0

latto,thx的答案。不,這部分清楚。 –

回答

0

因爲只要你從這個函數返回,每個以下 事件(最多幷包括最後一個)將在這裏首先發送 ,然後發送到目標的onTouchEvent()。

您在返回從onInterceptTouchEventtrue,然後你再從onTouchEvent返回false。你得到ACTION_DOWN,攔截它,然後你將停止接收其餘流的觸摸事件。

下一次請閱讀文檔,閱讀您的代碼,並且不要在您的帖子的標題中輸入粗俗單詞。

+0

我也嘗試從onInterceptTouchEvent()返回false,但stil結果相同。只有ACTION_DOWN事件。 –

+0

因爲你也從'onTouchEvent'返回'false'。如果你從'onTouchEvent'返回'false',這意味着該視圖不應該在觸摸的其餘部分接收到更多的觸摸事件,甚至是流式傳輸。 – Karakuri