我需要在ViewPager中放置HorizontalScrollView。 ViewPager的每个子项都是ScrollView,里面有HorizontalScrollView。 我缩放HorizontalScrollView的子项。之后,我需要允许用户滚动HorizontalScrollView但不要滚动到ViewPager的下一页。为了处理动作,我创建了自定义ViewPager:
public class MyViewPager extends ViewPager {
private static final String TAG = MyViewPager.class.getName();
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
final int action = MotionEventCompat.getActionMasked(ev);
// Always handle the case of the touch gesture being complete.
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
return super.onInterceptTouchEvent(ev); // Do not intercept touch event, let the child handle it
}
switch (action) {
case MotionEvent.ACTION_MOVE: {
ViewGroup view=(ViewGroup)(getChildAt(getCurrentItem()));
if (view.getChildCount()>0) {
view = (ViewGroup) view.getChildAt(0);
if (view instanceof CustomHorizontalScroll) {
CustomHorizontalScroll scroll = (CustomHorizontalScroll) view;
if (((CustomHorizontalScroll) view).isZoom()) {
return false;
} else {
return true;
}
}
}
break;
}
default: return super.onInterceptTouchEvent(ev);
}
}catch (Exception e){
return super.onInterceptTouchEvent(ev);
}
return super.onInterceptTouchEvent(ev);
}
}
问题在于onTouchAction。在我的水平视图中有onClick事件。如果我使用自定义ViewPager,那么有时onClick不工作。我需要做什么?在这种情况下如何使用ActionDown?
答案 0 :(得分:1)
实施onTouch
和onClick
将消耗onTouch
的触摸事件,并考虑将其消耗,而不是将其传递给使onClickListener
无用的其他各种触摸处理程序。
文档:
onTouch() - 返回一个布尔值,指示您的侦听器是否使用此事件。重要的是这个事件可以有多个相互跟随的动作。因此,如果在收到向下操作事件时返回false,则表示您尚未使用该事件,并且对此事件的后续操作也不感兴趣。因此,您不会在事件中调用任何其他操作,例如手指手势或最终的上行动作事件。
以下是处理这种情况的一些可用解决方案:
1 - 您可以使用onToach
和onClick
作为内部类,而不是实现每个侦听器。
2-您可以使用onToach
来检测标签事件:
if (gestureDetector.onTouchEvent(arg)) {
// single tap
return true;
} else {
// action up or down code
}