gpt4 book ai didi

android - 将 View 及其父 View 的 onTouchListeners 分开

转载 作者:行者123 更新时间:2023-11-29 02:08:21 27 4
gpt4 key购买 nike

我在 Android 中有一个 ListView,我想为行 View 和父 ListView 本身设置 onTouchListeners。我想分别对行上的单击和长按做出响应,但对整个 ListView 进行快速响应。 (我可以分别为每一行设置 onFling 方法,但它并不健壮,因为用户可以在行之间移动他的手指。)我能够成功地分别为行和 ListView 设置一个 onTouchListener,但是当我两者都设置,ListView 监听器永远不会触发 - 只有行监听器。无论我在行监听器的方法中返回 true 还是 false 都是这种情况。有谁知道如何为 View 及其父 View 触发 onTouchListeners,因为它们在屏幕上占据相同的像素?

ListView的相关代码:

在 Activity 的 onCreate 方法中:

mListViewDetector = new GestureDetector(new ListViewGestureListener());  
mListViewListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return mListViewDetector.onTouchEvent(event);
}
};

mListView = getListView();
mListView.setOnTouchListener(mListViewListener);

和自定义 GestureListener 类(定义为 Activity 中的嵌套类):

class ListViewGestureListener extends SimpleOnGestureListener {

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.i("ListViewGestureDetector","onFling");
return false;
}

}

Listview中各行的相关代码:

在适配器类的 bindView 方法中:

TextView textView;
textView.setOnTouchListener(new ListsTextViewOnTouchListener());

以及自定义的 onTouchListener 类(定义为适配器类中的嵌套类):

class ItemsTextViewOnTouchListener implements OnTouchListener {

public boolean onTouch (View v, MotionEvent event){
switch(event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
//stuff
return false;
case MotionEvent.ACTION_CANCEL:
//stuff
return false;
default:
break;
}
return false;
}

}

最佳答案

范斯,

答案有点棘手,但该功能是内置的。onTouchEvent() 为它作为监听器的任何对象处理 TouchEvent。然后有两种选择来完成你想要的。

1) 您可以覆盖父 View 上的 onInterceptTouchEvent() 并在那里处理您的 throw 。我发现这对于具有较小 subview 的大 View 非常有效。对于列表,我不喜欢这种方法(坦率地说)。 onInterceptTouchEvent() 非常适合将 Touch 远离 child ,但如果您这样做,您将不得不同时处理向左/向右滑动和水平滚动。

2) 您还可以创建一个 GestureDetector,它实际上是一个不可见的覆盖层(某种程度上)。如果您将 onTouchEvents 转发给它,您仍然会获得所需的行为,并且您不必担心手动处理滚动。在这种情况下,您只需将 TouchEvent 发送到 Detector,如果它返回 true,您的 List 将不执行任何操作,而您的 OnFling 将完成工作。如果它返回 false,则表示未对其进行处理,因此它必须属于 List 或其子项之一。

希望对您有所帮助,模糊逻辑

关于android - 将 View 及其父 View 的 onTouchListeners 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8741021/

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