里面ViewPager Horizo​​ntalScrollView的操作(Actions of H

2019-11-03 20:38发布

我需要把里面Horizo​​ntalScrollView ViewPager。 ViewPager的每个孩子都是滚动型与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在这种情况下工作吗?

Answer 1:

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

onTouch() - 这将返回一个布尔值,表明你的听众是否消耗了本次活动。 重要的是,这一事件可以有相互跟随多个动作。 所以,如果你当接收向下运动时返回false,即表示您还没有消耗的事件,也没有兴趣从这个事件的后续动作。 因此,你将不会被要求对事件中的任何其他操作,如手指的手势,或最终的后续行动的事件。

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

1-可以使用onToachonClick作为内部类的实施来代替每个侦听。

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

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


文章来源: Actions of HorizontalScrollView inside ViewPager