Android:VerticalViewPager 中的垂直 ScrollView 无法正常工作

标签 android android-viewpager android-scrollview

这是我的 VerticalViewPager:

    public class VerticalViewPager extends ViewPager {

    public interface OnTouchListener {
        void onTouchDown();
        void onTouchUp();
        void onTouchMove();
    }

    private OnTouchListener mListener;

    public VerticalViewPager(Context context) {
        super(context);
        init();
    }

    public VerticalViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        // The majority of the magic happens here
        setPageTransformer(true, new VerticalPageTransformer());
        // The easiest way to get rid of the overscroll drawing that happens on the left and right
        setOverScrollMode(OVER_SCROLL_NEVER);
    }

    public void setOnTouchListener(OnTouchListener listener) {
        mListener = listener;
    }

    private class VerticalPageTransformer implements ViewPager.PageTransformer {

        @Override
        public void transformPage(View view, float position) {

            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);

            } else if (position <= 1) { // [-1,1]
                view.setAlpha(1);

                // Counteract the default slide transition
                view.setTranslationX(view.getWidth() * -position);

                //set Y setNum to swipe in from top
                float yPosition = position * view.getHeight();
                view.setTranslationY(yPosition);

            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }

    /**
     * Swaps the X and Y coordinates of your touch event.
     */
    private MotionEvent swapXY(MotionEvent ev) {
        float width = getWidth();
        float height = getHeight();

        float newX = (ev.getY() / height) * width;
        float newY = (ev.getX() / width) * height;

        ev.setLocation(newX, newY);

        return ev;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev){
        boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
        swapXY(ev); // return touch coordinates to original reference frame for any child views
        return intercepted;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {

        switch (ev.getAction() & MotionEventCompat.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                mListener.onTouchDown();
                break;
            case MotionEvent.ACTION_UP:
                mListener.onTouchUp();
                break;
            case MotionEvent.ACTION_MOVE:
                mListener.onTouchMove();
                break;
        }

        return super.onTouchEvent(swapXY(ev));
    }
}

我在这个 ViewPager 中放了一些 fragment 。在最后一个 fragment 中有一个 ScrollView:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

            ...

        <ScrollView
            android:id="@+id/vertical_scrollview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:paddingBottom="@dimen/keyline_4">

                ....

            </LinearLayout>

        </ScrollView>

    </LinearLayout>

</RelativeLayout>

在最后一个 fragment 中,我可以正常滚动此页面。但是如果我想在 VerticalViewPager 中滑动到上一页,我不能,没有任何反应。

先行人员致谢!

最佳答案

尝试使用 NestedScrollView 而不是 ScrollView

关于Android:VerticalViewPager 中的垂直 ScrollView 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38967110/

相关文章:

android - 发送电子邮件 Intent

android - 另一个 fragment 背面的 ViewPager 空白

android - 为什么每当我翻阅我的应用程序 viewPager 时,我的 fragment onCreate 都会被广泛调用?

android - ScrollView 和 ListView 的区别

android - 如何在协调器布局中将 LinearLayout 附加到屏幕底部?

android - 如何使用 views.py 捕获从 android 发送到 Django 服务器的响应?

java - 将用户选择的日期从 DatePicker 设置为 Calendar

java - 在 ViewPager 中时,ListFragment 在事务后显示空屏幕

java - 如何解决viewpager中相同内容复制的问题

android - 如何在android中选择微调器时停止将屏幕滚动到顶部