Upload
-
View
123
Download
2
Embed Size (px)
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
Еще какой-то
Что я считаю крутым!
MultiStateAnimation
Transitions-Everywhere
FragmentAnimations
EasingInterpolator
Все!!!!!!!!!