Вы можете сделать свою собственную реализацию или использовать некоторые библиотеки. Для вашей собственной реализации я бы предложил использовать ViewPager , передавая виды вместо фрагментов, или PageTransformer , если вы хотите что-то более сложное.
Если вы предпочитаете библиотеки, я бы порекомендовал InfiniteCycleViewPager , carouselview sayyam или вы можете отправиться в тур здесь: https://android -arsenal.com / tag / 154 , существует множество библиотек с разными реализациями.
Пример реализации слайдера изображений с использованием ViewPager :
Сначала создайте xml своей активности с помощью компонента ViewPager:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.stackoverflow.imageslider.MainActivity">
</android.support.v4.view.ViewPager>
Затем в методе onCreate вашей деятельности создайте экземпляр ViewPager и создайте для него адаптер:
ViewPager viewPager = findViewById(R.id.view_pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageList);
viewPager.setAdapter(adapter);
В классе ViewPagerAdapter (который должен расширять PageAdapter) вы будете управлять изображениями, переопределяющими метод instantiateItem () :
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setImageDrawable(imageList.get(position));
return imageView;
}
В этом примере imageList будет List, который выполняется где-то еще.
Этот пример основан на руководстве от codinginflow.com , и вы также можете посмотреть там.
Теперь давайте посмотрим на более простую реализацию, которая будет работать так же, как вы просили, касаясь сторон изображения вместо скольжения.
Пример более простой реализации:
Создайте макет с ImageView и двумя переопределяющими его кнопками, одну для следующего изображения справа и одну для предыдущего изображения слева:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:srcCompat="@tools:sample/backgrounds/scenic" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/buttonPrevious"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent" />
<Button
android:id="@+id/buttonNext"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent" />
</LinearLayout>
</FrameLayout>
Затем установите onClick каждой кнопки, чтобы получить изображения из списка и установить в ImageView.
final ImageView imageView = findViewById(R.id.imageView);
Button next = findViewById(R.id.buttonNext);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentPosition ++;
imageView.setImageDrawable(drawableList.get(currentPosition));
}
});
Button previous = findViewById(R.id.buttonPrevious);
previous.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentPosition --;
imageView.setImageDrawable(drawableList.get(currentPosition));
}
});
drawableList будет Drawable, который выполняется где-то еще. Вы также можете перейти на другой вид списка изображений, не имеет значения. текущая позиция и int будут начинаться с 0.
Для PageTransformer Я бы порекомендовал ответ Бинси Бэби и ответ фантомы .
Если ссылка не работает, я оставлю код Bincy Baby здесь:
viewPagerMusicCategory.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(View page, float position) {
Log.e("pos",new Gson().toJson(position));
if (position < -1) {
page.setScaleY(0.7f);
page.setAlpha(1);
} else if (position <= 1) {
float scaleFactor = Math.max(0.7f, 1 - Math.abs(position - 0.14285715f));
page.setScaleX(scaleFactor);
Log.e("scale",new Gson().toJson(scaleFactor));
page.setScaleY(scaleFactor);
page.setAlpha(scaleFactor);
} else {
page.setScaleY(0.7f);
page.setAlpha(1);
}
}
}
);
Я думаю, вы также можете смешать PageTransformer с примерами, которые я привел.
Библиотеки, каждая из которых уже имеет хорошую документацию, если не в арсенале Android, вы можете найти ее в GitHub , и даже если я выложу здесь некоторый код, если библиотека закрывается, устаревает или что-то в этом роде таким образом, код больше не будет полезен.