在我的Activity
中,我使用Dave Smith的PagerContainer
示例添加了一个Gallery
- 就像View
一样,我用来实例化它的代码非常类似于在他的例子中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>
现在我的ViewPager
正常工作,看起来像这样(我省略了底部ImageView
)
但是我想调整未选择的项目的大小,旨在强调中心项目(选择),例如:
或:
我已找到this问题的已接受答案,但实施该解决方案意味着我将使选择大于其当前维度(已经是最大可能)。
所以我想在instantiateItem
中修改PagerAdapter
以设置缩小的宽度和高度,并在onPageSelected
中使用问题中显示的方法。
问题在于,我不确定应该拨打哪种LayoutParams
并在getWidth()
中调用getHeight()
和instantiateItem
返回0
。
目前我正在使用:
View v = container.getChildAt(position);
PagerContainer.LayoutParams params = (PagerContainer.LayoutParams)v.getLayoutParams();
但它有时会起作用,有时会抛出NPE。
我的方法是正确的还是应该以其他方式进行? 在这两种情况下,我应该改变什么来实现我想要的目标?
答案 0 :(得分:7)
为了达到这个结果,我最终使用了PixPlicity's MultiViewPager并根据@Blackbelt的建议编写了一个简单的PageTransformer
:
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);
}
}
}
结果如下:
答案 1 :(得分:5)
为此目的,您必须使用PageTransform。您必须实现的回调接收两个参数。前者是View对象,后者是int
。当其值为零时,表示视图对象引用中心的完全可见对象。 -1和-1分别是左右两侧的完全可见视图。您可以使用此值来实现所需的转换。例如,使用ViewCompat,您可以更改translationX,translationY和Scale值
答案 2 :(得分:3)
我有同样的问题。 我的解决方案是使用MultipleViewPager + PagerTransformer
它工作正常。