gpt4 book ai didi

android - 无法在 View 上检测到触摸事件并在父 View 上检测到点击事件

转载 作者:行者123 更新时间:2023-11-30 04:16:06 25 4
gpt4 key购买 nike

我有一个填满屏幕的布局“layout_base”和一个 subview “home”。我在“layout_base”上设置了一个 OnClickListener 来执行某些操作(如果弹出窗口打开则关闭它),在“home”上设置了一个 OnTouchListener 来执行其他操作(翻译随心所欲)。

我的问题是,如果我在“home”触摸监听器的 onTouch 方法中返回 true,我只能完成操作。如果我返回 false,则不会调用 onFling。为什么?从文档中我读到这仅意味着事件已被消耗,即根据我的理解,它不会传播给其他监听器。

所以:

  • 如果我在 onTouch 中返回 true,则会调用 onFling,但随后父 View 的 onClickListener 中的 onClick ' layout_base' 没有被调用。

  • 如果我在onTouch中返回false,则不会调用onFling,而是在父 View 的onClickListener中调用onClick调用“layout_base”。

如何让我的 onFling 检测在“home”上工作,而我的 onClick 检测在“layout_base”上工作?

谢谢

layout_base = findViewById(R.id.layout_base);
layout_base.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
closePopup(); // never called
}
});

contentGestureDetector = new GestureDetector(new ContentGestureListener());
contentGestureListener = new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
contentGestureDetector.onTouchEvent(event);
return true; // onFling only called if return true
}
};

home.setOnTouchListener(contentGestureListener);

class ContentGestureListener extends SimpleOnGestureListener {

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {


final int SWIPE_MIN_DISTANCE = 120;
final int SWIPE_MAX_OFF_PATH = 250;
final int SWIPE_THRESHOLD_VELOCITY = 200;

if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;

if(e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if(!mMenuOpen){
mOpenMenuAnim.start();
mMenuOpen = true;
}
}
else if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if(mMenuOpen){
mCloseMenuAnim.start();
mMenuOpen = false;
}
}

return false;
}
}

最佳答案

onTouch() 消费事件,你应该在你的方法 onTouch() 中,返回 false 而不是 true

public boolean onTouch(View v , MotionEvent motionEvent) {
// your code
return false;
}

编辑:

像这样更改你的 onTouch() 方法:

public boolean onTouch(View v, MotionEvent event) 
{
return contentGestureDetector.onTouchEvent(event);
}

关于android - 无法在 View 上检测到触摸事件并在父 View 上检测到点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991450/

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