Центр масштабирования элемента в видоискателе

Я пытаюсь реализовать горизонтальную карусель, где на экране будет максимум 3 элемента, а средний элемент будет иметь другой вид.

Я достиг этого с помощью ViewPager, переопределив обратный вызов getPageWidth (), но испытывая трудности в поиске среднего элемента.

Любая помощь или предложение были бы полезны.

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 
    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 ответ

  1. Учитывая, что вы просматриваете сразу три вида (так как у вас есть три из них на экране в любое время), почему бы вам не попробовать получить второй элемент из трех элементов на экране?

    Допустим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]);
        }
    }