gpt4 book ai didi

android - 尽管有 "return true",但触摸事件仍向上泄漏层次结构

转载 作者:搜寻专家 更新时间:2023-11-01 08:12:53 25 4
gpt4 key购买 nike

我有一个使用 ViewPager 的项目可以正常工作:我可以通过左右滑动来从一个 View 翻到另一个 View 。

在 ViewPager 的一页上,我有一个自定义 View ,我试图在它下面添加另一个触摸敏感的 View (LinearLayout),它不会“分页”ViewPager。像这样:

<LinearLayout >

<myView />

<LinearLayout> // The touch sensitive region
</LinearLayout>

</LinearLayout>

在我的 View 膨胀并添加到 ViewPager 之后,我调用 setOnTouchListener() 将监听器附加到内部 LinearLayout。监听器返回“真”。

不幸的是,当我在那个 View 中水平移动时,我移动到另一个页面。我得到的事件是:ACTION_DOWN、ACTION_MOVE(n 次)最后是 ACTION_CANCEL。虽然我留在了视野之内。

看起来事件已经上升到 View 层次结构并由 ViewPager 处理。

是否有对此行为的合乎逻辑的解释?

最佳答案

我找到了一个解决方法,即在 Activity 级别拦截事件,覆盖 dispatchTouchEvent()。

在那里,我调用 super.dispatchTouchEvent() 来处理所有事件,除非用户正在触摸我的触敏 View 。我测试用户是否位于正确的页面和正确的位置。在那种情况下,我自己处理事件。

@Override
public boolean dispatchTouchEvent (MotionEvent ev) {


if ( pager.getCurrentPosition()!=0 ) { // Test ViewPager page
super.dispatchTouchEvent(ev);
}
else {

int[] xy = new int[2];
findViewById(R.id.myTouchControl).getLocationOnScreen(xy);
int topOfView = xy[1];

if ( ev.getY() > topOfView ) {
// Custom processing
...

} else {
// Standard processing
super.dispatchTouchEvent(ev);
}
}
return false;
}

关于android - 尽管有 "return true",但触摸事件仍向上泄漏层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008697/

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