【问题标题】:Actions of HorizontalScrollView inside ViewPagerViewPager 内 Horizo​​ntalScrollView 的动作
【发布时间】:2015-09-02 16:14:16
【问题描述】:

我需要在 ViewPager 中放置 Horizo​​ntalScrollView。 ViewPager 的每个孩子都是 ScrollView,里面有 Horizo​​ntalScrollView。 我缩放 Horizo​​ntalScrollView 的孩子。之后,我需要允许用户滚动 Horizo​​ntalScrollView 但不滚动到 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?

【问题讨论】:

    标签: android android-viewpager horizontal-scrolling horizontalscrollview


    【解决方案1】:

    实现onTouchonClick 将消耗onTouch 的触摸事件,并认为它已被消耗,而不是将其传递给其他各种使您的onClickListener 无用的触摸处理程序。 文档:

    onTouch() - 这将返回一个布尔值来指示您的侦听器是否使用此事件。重要的是这个事件可以有多个相互跟随的动作。因此,如果在接收到 down 操作事件时返回 false,则表明您尚未消费该事件,并且对该事件的后续操作也不感兴趣。因此,事件中的任何其他操作都不会调用您,例如手指手势或最终的向上操作事件。

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

    1-您可以使用onToachonClick 作为内部类,而不是实现每个侦听器。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-31
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多