缩放ViewPager中项目的中心

时间:2016-12-27 18:58:38

标签: android android-viewpager carousel

我正在尝试实现一个水平旋转木马,屏幕上最多有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>

1 个答案:

答案 0 :(得分:0)

鉴于您一次刷过三个视图(因为您在屏幕上随时都有三个视图),为什么不尝试在屏幕上显示三个项目中的第二个项目?

假设您在屏幕上随时都有ABC。现在,此时的第二个项目将是您的中间项目,即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]);
    }
}