Подтвердить что ты не робот

Стрелки влево-вправо на ViewPager

Я хочу показать стрелки влево и вправо над моим ViewPager, чтобы указать прокрутку.

Я добавил два элемента ImageButtons над элементом ViewPager, но эти области блокируют ViewPager от запуска "прокрутки".

Я также хочу нажимать на эти стрелки, чтобы вызвать соответствующий фрагмент.

Короче: кнопки ImageButtons не должны мешать прокручиванию, но они должны регистрироваться нажатием.

Как я могу это достичь? Спасибо!

4b9b3361

Ответ 1

Я понял решение. Это очень просто.

Вместо того, чтобы использовать ImageButtons для отображения стрелок, теперь я использую ImageViews, потому что они передают любые сенсорные события на слой внизу.

Затем я вместо этого добавляю прозрачные кнопки на самих фрагментах, таким образом они не будут блокировать поведение плеера ViewPagers, но они будут запускать onClick Events!

Ответ 2

Код ниже работал у меня отлично. NB: используйте FrameLayout, поскольку он позволяет перекрывать представления

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <android.support.v4.view.ViewPager
                android:id="@+id/viewpager"
                android:layout_width="wrap_content"
                android:layout_height="200dp" />

            <ImageButton
                android:id="@+id/left_nav"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_gravity="center_vertical|left"
                android:src="@drawable/ic_chevron_left_black_24dp" />

            <ImageButton
                android:id="@+id/right_nav"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:layout_gravity="center_vertical|right"
                android:src="@drawable/ic_chevron_right_black_24dp" />

        </FrameLayout>

Следующая часть, которую я использовал для обработки событий clickButton click

viewPager = (ViewPager) view.findViewById(R.id.viewpager);

leftNav = (ImageButton) view.findViewById(R.id.left_nav);
rightNav = (ImageButton) view.findViewById(R.id.right_nav);

// Images left navigation
    leftNav.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int tab = viewPager.getCurrentItem();
            if (tab > 0) {
                tab--;
                viewPager.setCurrentItem(tab);
            } else if (tab == 0) {
                viewPager.setCurrentItem(tab);
            }
        }
    });

    // Images right navigatin
    rightNav.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int tab = viewPager.getCurrentItem();
            tab++;
            viewPager.setCurrentItem(tab);
        }
    });

Выход

введите описание изображения здесь

Ответ 3

Нет необходимости управлять текущим индексом для этого или обрабатывать любые рутки вручную. Просто вызовите метод viewPager.arrowScroll(int direction) на события щелчка левой и правой стрелок.

В двух словах выполните следующие два простых шага:

  • Внедрите 2 ImageViews/ImageButtons/Buttons для стрелок влево и вправо.
  • При нажатии на них вызовите:

    a) при нажатии левой стрелки - viewPager.arrowScroll(View.FOCUS_LEFT);

    b) при нажатии правой стрелки - viewPager.arrowScroll(View.FOCUS_RIGHT);

Ответ 4

Выполняйте кнопки со стрелками влево и вправо в фрагменте. Затем зарегистрируйте их onClick в своей деятельности и вызовите метод viewSpaces arrowScroll для прокрутки viewPager программно.

public void onRightClick(View view) {
    viewPager.arrowScroll(ViewPager.FOCUS_RIGHT);
}

public void onLeftClick(View view) {
    viewPager.arrowScroll(ViewPager.FOCUS_LEFT);
}

Создайте метод для переключения видимости влево/вправо в фрагменте.

public void toggleArrowVisibility(boolean isAtZeroIndex, boolean isAtLastIndex) {
    if(isAtZeroIndex)
        leftBtn.setVisibility(View.INVISIBLE);
    else
        leftBtn.setVisibility(View.VISIBLE);
    if(isAtLastIndex)
        rightBtn.setVisibility(View.INVISIBLE);
    else
        rightBtn.setVisibility(View.VISIBLE);

}

Теперь реализуем ViewPager.OnPageChangeListener в вашей деятельности. Используйте SmartFragmentStatePagerAdapter, чтобы отслеживать зарегистрированные фрагменты в памяти.

@Override
public void onPageSelected(int position) {
    MyFragment fragment = (MyFragment) smartAdapter.getRegisteredFragment(position);
    fragment.toggleArrowVisibility(position == 0, position == list.size() - 1);
}

Ответ 5

Сначала используйте относительный макет в качестве родительского макета

затем добавьте в него пейджер представления внутри него с атрибутом parent parent.

третий возьмите две кнопки изображения над пейджером представления, но под иерархией родительского макета придайте им центр вертикальной силы тяжести и сохраните свою сторону как правую, так и левую в соответствии с вашим требованием.

четвертый код записи для кнопок

пятый принимает статический счетчик, чтобы получить текущую страницу пейджера просмотра

слева и справа установите минус и плюс счетчик пейджера просмотра соответственно. и в соответствии с этим показывают данные в виде пейджера

это простая логика для кода, который вы можете найти в Google, вы легко получите его