Android 屏幕上的 ViewPager 中心项目

Android ViewPager center item on screen

我正在尝试在我的屏幕上显示一个对话框。那个对话框应该有 ViewPager 和 FragmentPagerAdapter。适配器中的每个项目都将宽度设置为 .7f。对我来说重要的是,当某些项目被选中时,它应该被捕捉到 ViewPager 的中心,并且下一个和上一个片段的部分可见(完全如图所示)。不幸的是,默认行为是向左对齐。

请问有什么方法可以实现吗?

谢谢

(如果有人问:在那张图片上,ViewPager 没有拉伸到对话框上。实际上,对话框与父级的宽度相匹配,并且按照这种方式进行布局,所以它看起来不像)

以防万一有人在寻找同样的东西,我来解决: 只需将左右填充设置为 ViewPager,然后将 clipToPadding 设置为 false。这将导致一个片段居中,而相邻片段的碎片如图所示。然后在片段之间添加 space 使用 viewPager.setPageMargin();在代码中。

就是这样:)

编辑://

这是一些示例代码

<android.support.v4.view.ViewPager
 android:id="@+id/viewPager"
 android:clipToPadding="false"
 android:paddingLeft="40dp"
 android:paddingRight="40dp"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />

ClipToPadding=false 确保即使片段位于 viewPager 的内容区域之外也会被绘制。

然后在代码中在 viewPager 的项之间添加 spaces:

mViewPager.setPageMargin(100);

请注意,setPageMargin 以像素数作为参数,而不是显示点数。您可能应该将一些 dp 值转换为像素,以便在所有设备上具有正确的间距。此方法应该可以正常工作:

public static float dipToPixels(Context context, float dipValue) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

我遇到了类似的问题,但没有人尝试以这种方式处理它,它可能不完全准确,但视觉上看起来居中。

使用 DisplayMetrics 获取设备高度尺寸,然后按如下方式为您的 viewpager 设置内边距:

    int height = Resources.getSystem().getDisplayMetrics().heightPixels;

    pager.setPadding(0,height/6,0,0);

请注意,viewpager 的项目布局必须设置为 "wrap_content",viewpager 在 activity/fragment 的高度必须为 "match_parent"。

在我的例子中,height/6 作为顶部填充使它看起来居中。尝试使用此数字以获得最佳结果。