0

我需要在ViewPager中放置Horizo​​ntalScrollView。 ViewPager的每个孩子都是带有Horizo​​ntalScrollView的ScrollView。 我缩放了Horizo​​ntalScrollView的子项。之后,我需要允许用户滚动Horizo​​ntalScrollView,但不滚动到ViewPager的下一页。要处理操作,我创建自定义ViewPager:ViewPager中Horizo​​ntalScrollView的操作

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?

回答

1

实施onTouchonClickonTouch消耗触摸事件,并认为这是消费,而不是把它传递到其它各种触摸处理程序,使您能够onClickListener没用。 文档:

onTouch() - 这会返回一个布尔值来指示您的侦听器是否使用此事件。重要的是,这个事件可以有多个相互关联的动作。因此,如果您在收到向下操作事件时返回false,则表示您没有使用该事件,并且对此事件的后续操作也不感兴趣。因此,您不会被要求在事件中执行任何其他操作,例如手指手势或最终上行动作事件。

这里是一些可用的解决方案来处理这种情况:

1,你可以使用onToachonClick作为一个内部类,而不是实现每个听众。

2 - 您可以使用onToach检测标签事件:

if (gestureDetector.onTouchEvent(arg)) { 
       // single tap 
       return true; 
      } else { 
       // action up or down code 
      }