Android 在ViewPager中的项目上缩放中心

Android 在ViewPager中的项目上缩放中心,android,android-viewpager,carousel,Android,Android Viewpager,Carousel,我正在尝试实现一个水平旋转木马,其中屏幕上最多有3个项目,中间的项目将有不同的视图 我通过覆盖getPageWidth()回调使用ViewPager实现了这一点,但很难找到中间项 任何帮助或建议都会有帮助 private class ViewPagerAdapter extends FragmentStatePagerAdapter { public int LOOPS_COUNT = 1000; private String[] str = { "A

我正在尝试实现一个水平旋转木马,其中屏幕上最多有3个项目,中间的项目将有不同的视图

我通过覆盖getPageWidth()回调使用ViewPager实现了这一点,但很难找到中间项

任何帮助或建议都会有帮助

private class ViewPagerAdapter extends FragmentStatePagerAdapter {

    public int LOOPS_COUNT = 1000;

    private String[] str = {
            "A",
            "B",
            "C",
            "D",
            "E",
            "F",
            "G",
            "H",
            "I",
            "DD"

    };

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        position = position % str.length;
        return ViewPagerCustomFragment.instance(str[position]);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        super.destroyItem(container, position, object);
    }

    @Override
    public int getCount() {
        return str.length * LOOPS_COUNT; // simulate infinite by big number of products
    }

    @Override
    public float getPageWidth(int position) {
        float f = 1.0f / 3;
        return (f);
    }
}
这是我的片段布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/abc"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center">


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_above="@+id/lin"
        android:text="aaaaaaa"/>

    <LinearLayout
        android:id="@+id/lin"
        android:layout_width="match_parent"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content">
        <View
            android:layout_width="0dp"
            android:layout_height="2dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:background="#000000" />


        <ImageView
            android:id="@+id/imageview"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_gravity="center"
            android:src="@drawable/circle" />


        <ImageView
            android:id="@+id/imageview1"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_gravity="center"
            android:visibility="gone"
            android:src="@drawable/circle"
            android:tint="#000000"/>

        <View
            android:layout_width="0dp"
            android:layout_height="2dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:background="#000000" />
    </LinearLayout>


</RelativeLayout>

如果您同时浏览三个视图(因为屏幕上随时都有三个视图),为什么不尝试获取屏幕上三个视图中的第二个呢

假设屏幕上随时都有
A
B
C
。现在,第二项是中间项,即
B

@Override
public Fragment getItem(int position) {
    position = position % str.length;
    if (position % 3 == 0) {
        int mid = position + 1;
        //do what you want to do with this. return a new fragment for the middle item (say ViewPagerCustomFragment2, for example).
        return ViewPagerCustomFragment2.instance(str[mid]);
    } else {
        return ViewPagerCustomFragment.instance(str[position]);
    }
}

不,不一定,所以基本上viewpager宽度除以3,当我滚动它时,将第一个项目向左滚动,并将右侧项目(即位置2上的第四个项目)带到第四个。这种解决方案在这种情况下不起作用。然后你可以简单地将中间视图初始化为1(int mid=1,初始中间位置),然后在每次滑动后只需添加1并更改视图。此外,你要做的是将中间视图更改为不同的视图,而不是其两侧的2个视图,对吗?是的,这会起作用,但滑动取决于用户的滚动,如果滚动速度快,即从最右边开始,它会同时滑动3个视图,新视图将为4、5和6。我想知道我是否能得到最左或最右视图的位置,然后我能找到中间视图。