日志永远不会记录 ACTION_UP 或 ACTION_MOVE (我从代码示例中删除了缩短版)
以下是我的缩短版代码:
public class ProfileBadgeView extends LinearLayout {
Activity act;
public ProfileBadgeView(Context context) {
super(context);
}
public ProfileBadgeView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ProfileBadgeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void initView(Activity act) {
//..init
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
logIntercept("ACTION DOWN");
} else if (ev.getAction() == MotionEvent.ACTION_UP) {
logIntercept("ACTION_UP");
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return true;
}
private void logIntercept(Object obj) {
Log.i(this.getClass().getSimpleName() + " INTERCEPT :", obj.toString());
}
}
答案 0 :(得分:8)
在onInterceptTouchEvent
事件后,您的ACTION_DOWN
方法未被调用,因为您在true
方法中返回onTouchEvent
。因此,所有其他事件都在onTouchEvent
而不是onInterceptTouchEvent
中发送:
使用此功能需要一些注意,因为它有一个相当复杂的 与View.onTouchEvent(MotionEvent)的交互,并使用它需要 以正确的方式实现该方法以及此方法。 活动将按以下顺序收到:
您将在此处收到失败事件。向下事件将被处理 要么是这个观点组的孩子,要么是给自己的 onTouchEvent()方法来处理;这意味着你应该实施 onTouchEvent()返回true,所以你将继续看到其余部分 手势(而不是寻找父视图来处理它)。也, 从onTouchEvent()返回true,您将不会收到任何内容 跟随onInterceptTouchEvent()中的事件和所有触摸处理 必须在onTouchEvent()中发生,就像正常。