2014-06-09 53 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