ViewPager具有多个可见的孩子并且选择更大.

Vek*_*r88 6 android android-viewpager

在我的Activity我添加了一个GalleryView 使用戴夫·史密斯的PagerContainer例子,我使用的实例是非常相似的代码PagerActivity 在他的榜样,而我改变了布局,因为我需要使用布局权重:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.example.myapp.PagerContainer
        android:id="@+id/pager_container"
        android:layout_width="match_parent"
        android:overScrollMode="never"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_height="0dp"
        android:layout_weight="0.66"
        >
        <android.support.v4.view.ViewPager
            android:layout_width="150dp"
            android:overScrollMode="never"
            android:layout_height="match_parent"
            android:layout_gravity="center" />
    </com.example.myapp.PagerContainer>

    <ImageView
        android:layout_width="150dp"
        android:layout_height="0dp"
        android:layout_weight="0.34"
        android:id="@+id/current_selection_logo"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

现在我的ViewPager 工作正常,看起来像这样(我省略了底部ImageView)

当前的viewpager

但是我想重新调整未选择的项目,旨在强调中心项目(选择),例如:

wanted_viewpager

要么:

wanted_viewpager_min

我已经找到了这个问题的接受答案,但是实现该解决方案意味着我将使选择大于其当前维度(已经是最大可能).

所以我想在编辑instantiateItemPagerAdapter  设置减小的宽度和高度,并在onPageSelected 使用问题中显示的方法.

问题是,我不知道是哪一种LayoutParams ,我应该打电话呼叫getWidth() 和getHeight() 在instantiateItem 收益0.

目前我正在使用:

View v = container.getChildAt(position);
PagerContainer.LayoutParams params = (PagerContainer.LayoutParams)v.getLayoutParams();
Run Code Online (Sandbox Code Playgroud)

但它有时会起作用,有时会抛出NPE.

我的方法是正确的还是我应该以另一种方式进行?在这两种情况下,我应该改变什么来实现我想要的?

Vek*_*r88 7

为了达到这个结果,我最终使用了PixPlicity的MultiViewPager,编写了一个简单PageTransformer的@Blackbelt建议:

private float mScale = 0.8f;
private class ScalePageTransformer implements ViewPager.PageTransformer{
    @Override
    public void transformPage(View view, float position) {
        if(position==0){
            ViewCompat.setScaleX(view, 1);
            ViewCompat.setScaleY(view, 1);
        }
        else{
            ViewCompat.setScaleX(view, mScale);
            ViewCompat.setScaleY(view, mScale);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果如下: 结果


Bla*_*elt 5

您必须为此目的使用PageTransform.您必须实现的回调接收两个参数.前者是View对象,后者是int.当其值为零时,表示视图对象引用中心的完全可见对象.-1和-1分别是左右两侧的完全可见视图.您可以使用此值来实现所需的转换.例如,使用ViewCompat,您可以更改translationX,translateY和Scale值