Стрелки влево-вправо на ViewPager
Я хочу показать стрелки влево и вправо над моим ViewPager, чтобы указать прокрутку.
Я добавил два элемента ImageButtons над элементом ViewPager, но эти области блокируют ViewPager от запуска "прокрутки".
Я также хочу нажимать на эти стрелки, чтобы вызвать соответствующий фрагмент.
![]()
Короче: кнопки ImageButtons не должны мешать прокручиванию, но они должны регистрироваться нажатием.
Как я могу это достичь?
Спасибо!
Ответы
Ответ 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, вы легко получите его