ViewPager具有多个可见子级,并选择了更大的子级 [英] ViewPager with multiple visible children and selected bigger

查看:77
本文介绍了ViewPager具有多个可见子级,并选择了更大的子级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Activity中,我使用戴夫·史密斯(Dave Smith)的 PagerContainer 示例,并且我用来实例化它的代码与他的示例中的PagerActivity非常相似,而我更改布局是因为我需要使用布局权重:

In my Activity I've added a Gallery-like View using Dave Smith's PagerContainer example and the code I'm using to instantiate it is very similar to the PagerActivity in his example, while I changed the layout because I needed to use layout weights:

<?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)

Now my ViewPager works properly and looks like this (I omitted the bottom ImageView)

但是我想调整未选中项目的大小,以强调居中的项目(选择),例如:

But I'd like to resize the unselected items, aiming to emphasize the centered item (selection), something like:

或:

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

I've found the accepted answer to this question, but implementing that solution means that I'll make the selection bigger than its current dimensions (which already are the maximum possible).

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

So I was thinking to edit instantiateItem in the PagerAdapter  to set reduced width and height, and in onPageSelected use the approach shown in the question.

问题是我不确定应该调用哪种类型的LayoutParams并在instantiateItem中调用getWidth()getHeight()返回0.

The problem is that I'm not sure about which kind of LayoutParams I should call and calling getWidth() and getHeight() in instantiateItem returns 0.

当前我正在使用:

View v = container.getChildAt(position);
PagerContainer.LayoutParams params = (PagerContainer.LayoutParams)v.getLayoutParams();

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

but it sometimes works and sometimes throws a NPE.

我的方法是正确的还是应该以其他方式进行? 在这两种情况下,我都应该改变以实现自己想要的?

Is my approach correct or should I proceed in another way? In both cases, what should I change to achieve what I want?

推荐答案

您必须使用

You have to use a PageTransform for this purpose. The callback you have to implement receives two parameters. The former is the View object, the latter is an int. When its value is zero, it means the view objects refers to the fully visible object to the center. -1 and -1, are the fully visible views to the left and right respectively. You can use this value to implement the transformation you want. Using ViewCompat, for instance, you can change the translationX, translationY and Scale values

这篇关于ViewPager具有多个可见子级,并选择了更大的子级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆