Бесконечный UI для смены карт в Android, поддерживающий кастомные анимации
Документация на китайском
implementation 'com.bakerj:infinite-cards:1.0.2'
animType
: тип анимации
front
: перемещает выбранную карту на первое местоswitchPosition
: перемещает выбранную карту на первое место, а первую карту — на позицию выбораfrontToLast
: перемещает первую карту на последнее местоcardRatio
: соотношение размера картыanimDuration
: длительность анимации каждой картыanimAddRemoveDelay
: задержка анимации добавления и удаления между каждым карточным элементомanimAddRemoveDuration
: длительность анимации добавления и удаления каждого карточного элемента## Как использовать<com.bakerj.infinitecards.InfiniteCardView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
infiniteCard:animDuration="1000"
infiniteCard:cardRatio="1"/>
Просто расширяйте базовый адаптер
class MyAdapter extends BaseAdapter {
...
}
mAdapter = new MyAdapter(resId);
mCardView.setAdapter(mAdapter);
Если вы используете все анимации по умолчанию, ничего дополнительно делать не требуется.
mCardView.setAnimInterpolator(new LinearInterpolator());
mCardView.setTransformerToFront(new DefaultTransformerToFront());
mCardView.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)); }
```java
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) {
}
});
## Лицензия
InfiniteCards распространяется под лицензией [Apache 2.0](license.txt).
Авторское право © 2017 BakerJ.
Лицензировано под лицензией Apache, Версия 2.0 («лицензия»); вы можете использовать этот файл только в соответствии с лицензией. Вы можете получить копию лицензии по следующему адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это требует применимого закона или было согласовано письменно, программное обеспечение, распространяемое по лицензии, распространяется на условиях «КАК ЕСТЬ». БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ В ЛЮБОМ ВИДЕ, явных или подразумевающихся. Смотрите лицензию для конкретного языка, регулирующего права и условия использования, предусмотренные лицензией.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )