我正在使用库来实现带有Swipe to Dismiss功能的ListView。 我想知道如何在从库调用自定义侦听器之前拦截事件,以便在ListView的视图中处理onClick事件。 或者如何覆盖OnTouch方法来处理Click事件。
这是图书馆的SwipeDismissListViewTouchListener。
我知道我必须使用case MotionEvent.ACTION_UP:
进行评估,但我尝试的所有内容都出错了。如果我消耗点击case MotionEvent.ACTION_DOWN:
,它就会再次显示滑动手势。如果我使用点击case MotionEvent.ACTION_UP:
它最有效,只需轻扫。
以下是与我实施的活动非常相似的example活动。
在这种情况下,我希望能够在方法view.setOnClickListener
中执行public void getView
之类的操作而不会阻止滑动手势
答案 0 :(得分:0)
我知道这是一个相当古老的帖子,但我也遇到了问题,所以我发帖告诉我如何解决它。
首先,我创建了一个实现OnTouchListener的类。该类记录用户首次按下屏幕的位置,然后记录用户将手指抬离屏幕的位置。如果两点之间的距离大于200px,那么我通知监听视图用户向左或向右滑动,否则,我通知听众用户点击了视图。
这是班级:
public class SmartLinkSwipeDetector implements OnTouchListener {
//declare needed constants
private final String CLASS_NAME = getClass().getName();
private final int MIN_DISTANCE = 200; //TODO - change distance
private float downX, upX;
//declare needed variables
private SmartLinkSwipeDetectorInterface swipeDetector;
public SmartLinkSwipeDetector(WorkoutSupplementBaseFragment fragment) {
super();
testForSwipeDetectorInterface(fragment);
}
private void testForSwipeDetectorInterface(WorkoutSupplementBaseFragment fragment) {
//ensure activity implements interface
try {
swipeDetector = (SmartLinkSwipeDetectorInterface) fragment;
} catch (ClassCastException ex) {
String errorString = fragment.getClass().getName() + " must implement SmartLinkSwipeDetectorInterface";
Log.e(CLASS_NAME, errorString);
throw new ClassCastException(errorString);
}
}
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = event.getX();
return true;
case MotionEvent.ACTION_UP:
upX = event.getX();
float deltaX = downX - upX;
if (Math.abs(deltaX) > MIN_DISTANCE) {
if (deltaX < 0)
swipeDetector.swipeRight();
else if (deltaX > 0)
swipeDetector.swipeLeft();
} else {
swipeDetector.onShortClick(view);
}
return true;
default:
return true;
}
}
}
确保使用此OnTouchListener的活动或片段实现类似于此的接口:
public interface SmartLinkSwipeDetectorInterface {
public void onShortClick(View view);
public void swipeLeft();
public void swipeRight();
}
最后,任何想要实现此OnTouchListener的视图或按钮都需要这样做:
View.setOnTouchListener(new SmartLinkSwipeDetector(this));
这是实现SmartLinkSwipeDetectorInterface的活动或片段