如何在横向滑动ViewPager中放置垂直滑动的ViewPager

7

我正在自定义我的Android应用程序以在四个方向上滑动,我使用ViewPager水平滑动和VerticalViewPager垂直滑动 (这就像对DirectionalViewPager的修改,因为原版本已弃用)。问题是当将ViewPager放入VerticalViewPager中时,只有垂直滑动起作用,而当将VerticalViewPager放入ViewPager中时,只有水平滑动起作用。以下是第一种状态下的代码:

VerticalViewPager verticalViewPager = (VerticalViewPager) findViewById(R.id.vertical_pager);
        verticalViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager()));
        verticalViewPager.setPageTransformer(true, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(View view, float position) {
                int pageWidth = view.getWidth();
                int pageHeight = view.getHeight();

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

                } else if (position <= 1) { // [-1,1]
                    // Modify the default slide transition to shrink the page as well
                    float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
                    float vertMargin = pageHeight * (1 - scaleFactor) / 2;
                    float horzMargin = pageWidth * (1 - scaleFactor) / 2;
                    if (position < 0) {
                        view.setTranslationY(vertMargin - horzMargin / 2);
                    } else {
                        view.setTranslationY(-vertMargin + horzMargin / 2);
                    }

                    // Scale the page down (between MIN_SCALE and 1)
                    view.setScaleX(scaleFactor);
                    view.setScaleY(scaleFactor);

                    // Fade the page relative to its size.
                    view.setAlpha(MIN_ALPHA +
                            (scaleFactor - MIN_SCALE) /
                                    (1 - MIN_SCALE) * (1 - MIN_ALPHA));

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

        verticalViewPager.setCurrentItem(1);

        TabPagerAdapter TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
        ViewPager Tab = (ViewPager) findViewById(R.id.pager);
        Tab.setAdapter(TabAdapter);
        Tab.setCurrentItem(1);
TabPagerAdapter 类:
public class TabPagerAdapter extends FragmentStatePagerAdapter {
    public TabPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            //Fragment for Left side
            return new AC_Left();
        case 1:
           //Fragment for Center side
            return new AC_Center();
        case 2:
            //Fragment for Right side
            return new AC_Right();
        }
        return null;

    }

    @Override
    public int getCount() {
        return 3;
    }
}

AC_LeftAC_RightAC_Center是类似的fragments,除了返回的layout之外:

public class AC_Center extends Fragment {
  @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
          View ac_center_frag = inflater.inflate(R.layout.ac_center_fragment, container, false);
          return ac_center_frag;

  }
}

还有这个XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg" >

  <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/buttonBar"
            android:orientation="vertical"
            android:weightSum="1" >

  <com.example.myapp.VerticalViewPager
            android:id="@+id/vertical_pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <android.support.v4.view.ViewPager
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/pager"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

  </com.example.myapp.VerticalViewPager>

 </LinearLayout>
</RelativeLayout>

我是自己在工作。你需要支持多老的版本? - codeetcetera
你对包装有什么要求吗? 到目前为止,我已经有一个工作网格可以在所有方向上环绕到开始/结束。 我仍在努力停止翻页当它到达任何方向的结尾时。 - codeetcetera
2
顺便提一下,您可以在每个项目中使用LinearSnapHelper和ViewPager与RecyclerView一起使用。 - Qamar
2
请查看此链接:https://dev59.com/dl4b5IYBdhLWcg3wchNL - Qamar
@Qamar 谢谢,我会检查的。 - Muhammed Refaat
显示剩余6条评论
1个回答

5
我用示例应用程序创建了一个库,并将其放在github上。基本上,它维护一个视口,并在每个页面更改时更新视图分页器。您需要实现一个适配器,为每一行、列索引提供片段。虽然它有点混乱,但是应该可以在这个过程中工作。您可以设置一个位掩码,以使其在所需的任何方向上进行包装。将其设置为GRID_WRAP_NONE,以完全不进行包装。 https://github.com/btate/BTGridPager-Android 这可能不是您需要的确切内容,但它应该能帮助您入门。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接