Android - компонент «Велоспорт через изображения» - PullRequest
0 голосов
/ 07 мая 2019

Я ищу такой компонент: enter image description here

Если вы использовали Tinder, я хочу что-то вроде, когда вы просматриваете профиль, как вы можете циклически просматривать их изображения.

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

Спасибо!

Редактировать: Также извините за плохой заголовок, на самом деле не знал, как назвать эти типы вопросов.

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете сделать свою собственную реализацию или использовать некоторые библиотеки. Для вашей собственной реализации я бы предложил использовать 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 , и даже если я выложу здесь некоторый код, если библиотека закрывается, устаревает или что-то в этом роде таким образом, код больше не будет полезен.

...