1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bakerj-Android-InfiniteCards

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_cn.md 4.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.03.2025 06:34 44ed4a5

InfiniteCards

License Кастомизируемый слайдер с анимациями для карточек Идея реализации: http://bakerjq.com/2017/05/28/20170528_InfiniteCard/

Пример скриншотов

Пример

Включение в проект Gradle

implementation 'com.bakerj:infinite-cards:1.0.1'

Параметры

  • animType: тип анимации
    • front: перемещает нажатую карточку на первое место
    • switchPosition: меняет местами нажатую карточку и первую карточку
    • frontToLast: перемещает первую карточку на последнее место, остальные карточки передвигаются на одно место вперед
  • cardRatio: соотношение ширины и высоты карточек
  • animDuration: продолжительность анимации карточек
  • animAddRemoveDelay: задержка между анимациями при добавлении или удалении карточек
  • animAddRemoveDuration: продолжительность анимации при добавлении или удалении карточек

Использование

XML-разметка

<com.bakerj.infinitecards.InfiniteCardView
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        infiniteCard:animDuration="1000"
        infiniteCard:cardRatio="1"/>

Установка адаптера

Прямое наследование от BaseAdapter

class MyAdapter extends BaseAdapter {
    ...
}
mAdapter = new MyAdapter(resId);
mCardView.setAdapter(mAdapter);

Анимационные преобразования и интерполяторы

По умолчанию

По умолчанию можно не указывать, либо установить различные значения по умолчанию

mCardView.setAnimInterpolator(new LinearInterpolator());
mCardView.setTransformerToFront(new DefaultTransformerToFront());
mCardView.setTransformerToSwitchPosition(new DefaultTransformerToSwitchPosition());
mCardView.setTransformerToFrontToLast(new DefaultTransformerToFrontToLast());
``````java
setTransformerToBack(new DefaultTransformerToBack());
mCardView.setZIndexTransformerToBack(new DefaultZIndexTransformerCommon());

Кастомизация

Установка преобразователей и интерполяторов позволяет создавать кастомные эффекты анимации

mCardView.setTransformerToBack(new AnimationTransformer() {
    @Override
    public void transformAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
        int positionCount = fromPosition - toPosition;
        float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
        ViewHelper.setScaleX(view, scale);
        ViewHelper.setScaleY(view, scale);
        if (fraction < 0.5) {
            ViewCompat.setRotationX(view, 180 * fraction);
        } else {
            ViewCompat.setRotationX(view, 180 * (1 - fraction));
        }
    }

    @Override
    public void transformInterpolatedAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
        int positionCount = fromPosition - toPosition;
        float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
        ViewHelper.setTranslationY(view, -cardHeight * (0.8f - scale) * 0.5f - cardWidth * (0.02f * fromPosition - 0.02f * fraction * positionCount));
    }
});
mCardView.setZIndexTransformerToBack(new ZIndexTransformer() {
    @Override
    public void transformAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
        if (fraction < 0.4f) {
            card.zIndex = 1f + 0.01f * fromPosition;
        } else {
            card.zIndex = 1f + 0.01f * toPosition;
        }
    }

    @Override
    public void transformInterpolatedAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
    }
});

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/bakerj-Android-InfiniteCards.git
git@api.gitlife.ru:oschina-mirror/bakerj-Android-InfiniteCards.git
oschina-mirror
bakerj-Android-InfiniteCards
bakerj-Android-InfiniteCards
master