gpt4 book ai didi

android - onInterceptTouchEvent,onTouchEvent只看到ACTION_DOWN

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:16:40 26 4
gpt4 key购买 nike

我有一个顶级 ViewGroup,我称之为 SliderView,我想在其中检测滑动。这主要是可行的,但仍然存在一个奇怪的故障。

SliderView 的本质是覆盖 onInterceptTouchEvent,一旦用户实际滑动,返回“true”以防止其他 View 看到 MotionEvent。这是一段代码:

public class SliderView extends ViewGroup
{
enum MoveState { MS_NONE, MS_HSCROLL, MS_VSCROLL };
private MoveState moveState = MoveState.MS_NONE;

... other code ...

public boolean onInterceptTouchEvent(MotionEvent e)
{
final int action = e.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
moveState = MoveState.MS_NONE;
break;

case MotionEvent.ACTION_MOVE:
if (moveState == MoveState.MS_NONE)
{
if (motion is horizontal)
{
moveState = MoveState.MS_VSCROLL;
return true;
}
else
moveState = MoveState.MS_VSCROLL; // let child window handl MotionEvent
}
else if (moveState == MoveState.MS_HSCROLL)
return true; // don't let children see motion event.
}
return super.onInterceptTouchEvent (e);
}

... other code ...
}

据我了解,我的 SliderView(最外层 View )应该始终接收 onInterceptTouchEvent。在我的一个测试中,顶级子级是 a 但是,在以下情况下,这似乎不是。

当顶级子项是 ScrollView 时,onInterceptTouchEvent 获取 ACTION_MOVE 并且我的代码执行我想要的操作。在另一种情况下,顶级子项是 LinearLayout,它有时会失败:它总是获取 ACTION_DOWN,但仅当用户触摸 LinearLayout 内的小部件时才获取 ACTION_MOVE;如果触摸空白区域,只有 ACTION_DOWN 通过。

我会注意到,它的行为就好像故障情况触摸发生在 SliderView 之外。但是,如果是这样的话,为什么我会收到 ACTION_DOWN 事件?

第二个注意事项:查看 ScrollView 的源代码,我发现它正在检查“inChild”;我还没有弄清楚那是干什么用的以及它可能有何相关性。

最佳答案

由于user123321的回答here

onInterceptTouchEvent only get called if the parent has a child view which returns "true" from onTouchEvent. Once the child returns true, the parent now has a chance to intercept that event

关于android - onInterceptTouchEvent,onTouchEvent只看到ACTION_DOWN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com