Vek*_*r88 6 android android-viewpager
在我的Activity我添加了一个Gallery样View 使用戴夫·史密斯的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)

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

要么:

我已经找到了这个问题的接受答案,但是实现该解决方案意味着我将使选择大于其当前维度(已经是最大可能).
所以我想在编辑instantiateItem时PagerAdapter 设置减小的宽度和高度,并在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.
我的方法是正确的还是我应该以另一种方式进行?在这两种情况下,我应该改变什么来实现我想要的?
为了达到这个结果,我最终使用了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)
结果如下:

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