gpt4 book ai didi

android - 如何将垂直滑动的 ViewPager 放入水平滑动的 ViewPager

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:45 39 4
gpt4 key购买 nike

我正在自定义我的 Android 应用程序以在四个方向上滑动,我正在使用 ViewPager 水平VerticalViewPager 滑动垂直滑动(这就像对 DirectionalViewPager 的修改,因为原来的已弃用)。问题是当 VerticalViewPager 中包含 ViewPager 时,Vertical 滑动仅在包含 VerticalViewPager 时起作用ViewPager 只有Horizo​​ntal 滑动有效,这是我的第一个状态的代码:

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 是类似的 fragment ,除了布局 返回:

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>

最佳答案

我使用示例应用程序为此创建了一个库并将其放在 github 上。基本上它维护一个视口(viewport)并在每次页面更改时更新 View 寻呼机。您必须实现一个适配器,以便为每一行、列索引提供 fragment 。不可否认,它有点乱七八糟,但同时应该可以工作。您可以设置一个位掩码,让它按您需要的任何方向包裹。将其设置为 GRID_WRAP_NONE 使其完全不换行。

https://github.com/btate/BTGridPager-Android

这可能不是您所需要的,但它应该可以帮助您入门。

关于android - 如何将垂直滑动的 ViewPager 放入水平滑动的 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130418/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com