Android 如何将滚动事件传递到另一个视图,但保持点击/单击事件并对其作出反应
我有一个Android 如何将滚动事件传递到另一个视图,但保持点击/单击事件并对其作出反应,android,Android,我有一个水平滚动视图,我想将其拖动/滚动事件传递给另一个视图(或手势侦听器),但我希望它能够对其子视图上的单击/点击事件做出反应。我该怎么做 我看这个, 但我需要的正是他们在onScroll方法中保留的开放式代码-如何将滚动传递到另一个视图?我建议以下解决方案: 1/查找ViewPager的公共父视图和要将事件传递给的视图 2/创建扩展父视图的customView 3/使用此命令覆盖dispatchTouchEvent public boolean dispatchTouchEvent(Moti
水平滚动视图
,我想将其拖动/滚动事件传递给另一个视图(或手势侦听器),但我希望它能够对其子视图上的单击/点击事件做出反应。我该怎么做
我看这个,
但我需要的正是他们在
onScroll
方法中保留的开放式代码-如何将滚动传递到另一个视图?我建议以下解决方案:
1/查找ViewPager的公共父视图和要将事件传递给的视图
2/创建扩展父视图的customView
3/使用此命令覆盖dispatchTouchEvent
public boolean dispatchTouchEvent(MotionEvent ev){
if (mDetector.onTouchEvent(ev)){
// This is a scroll event -> Pass to the targetView;
return findViewById(R.id.targetView).dispatchTouchEvent(ev);
}
// this is not a scroll event. dispatch normally
super.dispatchTouchEvent(ev);
}
p/S:if do viewpager.setOnTouchListener()。只有当viewPager的页面(通常是片段)对触摸事件不感兴趣时,才会调用侦听器。
例如,您的ViewPager包含一个具有ListView(recyclerView)的片段,那么您的Listener不会因为垂直滚动事件而被调用,但ListView会。因此,根据页面的视图,您可能会错过事件。对于
水平滚动视图
执行以下操作:
private float xCoordinateOfScreenTouch;
private float xCoordinateOfDragRelease;
private static final int MIN_DISTANCE = 40;
horizontalScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xCoordinateOfScreenTouch = event.getX();
break;
case MotionEvent.ACTION_UP:
xCoordinateOfDragRelease = event.getX();
float deltaX = xCoordinateOfDragRelease - xCoordinateOfScreenTouch;
if (Math.abs(deltaX) > MIN_DISTANCE) {
if (xCoordinateOfDragRelease > xCoordinateOfScreenTouch) {
// left to right
// do whatever (pass the event)
} else {
// right to left
// do whatever (pass the event)
}
}
break;
}
return true;
}
});
对于默认情况下将ACTION\u DOWN
事件传递给的孩子,请执行以下操作:
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
xCoordinateOfScreenTouch = event.getRawX();
}
return false;
}
});
它是一个
水平滚动视图
,而不是一个浏览页面-这会改变什么吗?我今天会试试你的建议,让你知道发生了什么,它不会影响任何事情。是的,等待结果:D