2016 06-11 Данил Перевалов. Создание простых анимаций на...

Preview:

Citation preview

Как создавать анимациидля Android...и делать это просто

Данил ПереваловAndroid разработчик

в компании LiveTyping

LayoutTransition Honeycomb

android:animateLayoutChanges="true"

Хочу свою анимацию… Можно!

Флаги

● APPEARING — указывает анимацию для тех объектов, которые появляются.● DISAPPEARING — указывает анимацию для тех объектов, которые удаляются.● CHANGE_APPEARING — указывает анимацию для тех элементов, которые

меняются из-за нового элемента.● CHANGE_DISAPPEARING — указывает анимацию для тех элементов, которые

меняются из-за удаленного элемента.● CHANGING - чуть попозже расскажу...

Свой аниматор

LayoutTransition layoutTransition = new LayoutTransition();linearLayout.setLayoutTransition(layoutTransition);layoutTransition.setAnimator(LayoutTransition.DISAPPEARING, ObjectAnimator.ofFloat(view, View.TRANSLATION_X, 0f, width));layoutTransition.setAnimator(LayoutTransition.APPEARING, ObjectAnimator.ofFloat(view, View.TRANSLATION_X, width,0f));

LayoutTransition JB (API 16)появилась возможность анимировать изменения

Как же именно?LayoutTransition layoutTransition = new LayoutTransition();linearLayout.setLayoutTransition (layoutTransition);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES. JELLY_BEAN) { layoutTransition.enableTransitionType(LayoutTransition. CHANGING);}//на кликLinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view.getLayoutParams();layoutParams.height = isBig ? normSize : bigSize;view.setLayoutParams(layoutParams);isBig = !isBig;

Минусы:● не очень гибок;● нет полного контроля;● нельзя прервать;● для AnimatorSet нужно

выставить точное времяИ как следствие...

TransitionFrameworkПоявился в Kitkat (4.4)

Изменение объектаTransitionManager. beginDelayedTransition(root, transition);

FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view.getLayoutParams();

layoutParams.height = isBig ? normSize : bigSize;

layoutParams.width = isBig ? normSize : bigSize;

view.setLayoutParams(layoutParams);

Основные Transition

● СhangeBounds. Это Transition, который отвечает за изменение координат View внутри layout и его размеров;

● Fade. Известные анимации fade in и fade out;

● AutoTransition. Является свзякой FadeIn,ChangeBound, FadeOut

А можно всех посмотреть?

SlideНовый Transition, который является наследником Visibility, как и Fade. C помощью него появляющаяся в сцене View может «прибегать» из выбранного края. Пример с new Slide(Gravity.LEFT)):

TransitionParagonОписывает задержку начала анимации. Например, при установке CircularPropagation чем View ближе к установленному эпицентру, тем раньше она начинает анимироваться. Задается для Transition через параметр setPropagation.

Пример удаления всех View из FrameLayout с Explode Transition и установленным CircularPropagation (эпицентром ставится точка тапа на экран):

ExplodeВо многом похож на Slide, но View будет выбегать или из некоторого направления, который задается с помощью так называемого эпицентра Transition/

ChangeImageTransform

Transition, который анимирует матричный переход изображения внутри ImageView. С помощью него можно плавно изменять размеры и scaleType изображений. Разберем на примере. Барышню слева мы подвергли операциям ChangeBounds и ChangeImageTransform, тогда как девушке справа достался только ChangeBounds. Невооруженным взглядом заметно, как правая «дергается» в начале анимации.

ChangeClipBounds

Transition, который как бы расширяет границы изображения

Интерполяторы

С интерполяторомTransition transition = new ChangeBounds();

transition.setInterpolator( new BounceInterpolator());

TransitionManager. beginDelayedTransition(root, transition);

FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view.getLayoutParams();

layoutParams.height = isBig ? normSize : bigSize;

layoutParams.width = isBig ? normSize : bigSize;

view.setLayoutParams(layoutParams);

Bounce

Overshoot

Cycle

Еще какой-то

Что я считаю крутым!

Все!!!!!!!!!

Recommended