- Анимации в Android по полочкам (Часть 3. «Низкоуровневые» анимации)
- Часть 3. «Низкоуровневые» анимации
- 1. Рисование на канвасе View
- 2. Рисование на канвасе SurfaceView
- 3. OpenGL
- Animating views in android
- Анимации в Android по полочкам (Часть 1. Базовые анимации)
- Часть 1. Базовые анимации
- 1. Кадр за кадром
- 2. Анимация свойств объекта (aka Property Animator)
- 3. Анимация View (aka View animation)
- 4. Анимация векторных ресурсов (aka AnimatedVectorDrawable)
- Basic Animation Of Android Views With Example
- 1. Alpha
- 2. Background Color
- 3. Translations
- 4. Scale
- 5. Rotation
Анимации в Android по полочкам (Часть 3. «Низкоуровневые» анимации)
Все методы рассмотренные в предыдущих частях хороши и удобны, однако если нам нужно анимировать большое количество объектов, они могут оказаться не подходящими. В данной части мы рассмотрим способы которые нам позволят работать с действительно большим количеством объектов и создавать программно сложные анимации.
Часть 3. «Низкоуровневые» анимации
1. Рисование на канвасе View
Первый способ который мы рассмотрим это рисование в методе onDraw нашего объекта View . Реализуется данный способ просто, достаточно переопределить onDraw и в конце вызвать postInvalidateOnAnimation() .
В данном примере наш drawable будет перемещаться по оси x.
Пример со снежинками выше будет занимать несколько больше кода, т.к. нам нужно хранить состояние каждой отдельной снежинки отдельно.
- Случаи в которых легче нарисовать анимацию программно
Достоинства:
- Можно создавать анимации зависящие абсолютно от любых параметров
- Нет лишних затрат на объекты View
Недостатки:
- Расчёты анимации и отрисовка происходят в UI thread
2. Рисование на канвасе SurfaceView
Что если расчёт следующего шага анимации будет занимать значительное время? Мы всё ещё можем воспользоваться первым способом и вынести расчёты в отдельный поток. Но это всё равно не приведёт к 100% плавности в анимации т.к. UI thread может быть загружен ещё чем либо помимо нашей анимации.
Android позволяет отвязаться от основного цикла(main loop) отрисовки с помощью компонента SurfaceView . А раз мы больше не привязаны к основному циклу, то нам придётся держать свой поток для расчётов и отрисовки. SurfaceView предоставляет коллбэки в которых мы можем запустить и остановить наш поток. В потоке по окончанию расчётов мы будем отрисовывать нашу анимацию.
Реализация той же анимации снежинок будет выглядеть следующим образом:
- Случаи в которых легче нарисовать анимацию программно
- Игры
Достоинства:
- Можно создавать анимации зависящие абсолютно от любых параметров
- Нет лишних затрат на объекты View
Недостатки:
3. OpenGL
Точно также, как и на канвасе, мы можем рисовать используя OpenGL API. Если вы задумали что-либо сложнее чем куб на картинке, то стоит посмотреть в сторону какого-либо движка, например libgdx. К сожалению, даже базовый пример займёт здесь довольно много места, поэтому ограничимся только этим кратким превью.
- Высокая производительность и управление памятью, шейдеры
Недостатки:
Источник
Animating views in android
Android View Animations
One day, I saw an iOS library, which is a view shaker, it’s very beautiful. I think Android also need one, and should be better.
So, I started to collect animation effects. and in two days, this project born.
Since Version 2.0, NineOldAndroids has been removed. Thanks Jake Wharton.
For making animations more real, I created another project named Android Easing Functions which is an implementations of easing functions on Android. So, we need to dependent that project.
Just like play Yo-yo.
Flash , Pulse , RubberBand , Shake , Swing , Wobble , Bounce , Tada , StandUp , Wave
Hinge , RollIn , RollOut , Landing , TakingOff , DropOut
BounceIn , BounceInDown , BounceInLeft , BounceInRight , BounceInUp
FadeIn , FadeInUp , FadeInDown , FadeInLeft , FadeInRight
FadeOut , FadeOutDown , FadeOutLeft , FadeOutRight , FadeOutUp
FlipInX , FlipOutX , FlipOutY
RotateIn , RotateInDownLeft , RotateInDownRight , RotateInUpLeft , RotateInUpRight
RotateOut , RotateOutDownLeft , RotateOutDownRight , RotateOutUpLeft , RotateOutUpRight
SlideInLeft , SlideInRight , SlideInUp , SlideInDown
SlideOutLeft , SlideOutRight , SlideOutUp , SlideOutDown
ZoomIn , ZoomInDown , ZoomInLeft , ZoomInRight , ZoomInUp
ZoomOut , ZoomOutDown , ZoomOutLeft , ZoomOutRight , ZoomOutUp
Welcome contribute your amazing animation effect. 😀
YoYo is a toy, with a lot of Techniques.
(2013) A student in mainland China.
Welcome to offer me an internship. If you have any new idea about this project, feel free to contact me.
(2019) Five years later, now I become an investment associate in China.
Welcome to send your business plan to me. Maybe I would have a better understanding on your startup project than others. Trust me.
Источник
Анимации в Android по полочкам (Часть 1. Базовые анимации)
Сегодня я хочу немного рассказать про анимацию в Android. Думаю для всех достаточно очевидный факт, что анимации могут украсить наше приложение. Но я считаю, что они могут намного больше. Первое это — хорошие анимации даже при скромной графике могут вывести наше приложение на абсолютно новый уровень. Второе — это дополнительный инструмент для общения с пользователем, позволяющий фокусировать внимание, подсказывать механики приложения, и многое другое… но это отдельная большая тема.
Сегодня мы поговорим об инструментах для создания анимации. К сожалению, так получилось, что в Android достаточно много способов что либо анимировать, и по началу в них очень легко запутаться. Я постараюсь привести максимально общую классификацию и оставлю ссылки исключительно на документацию, т.к. туториалов можно найти предостаточно. Надеюсь эта статья поможет уложить в голове всё по полочками и, при необходимости создать анимацию, выбрать наиболее подходящий способ.
Часть 1. Базовые анимации
Часть 2. Комплексные анимации
Часть 3. «Низкоуровневые» анимации
Часть 1. Базовые анимации
1. Кадр за кадром
Предполагаю, что первая анимация в мире создавалась именно так, и в Android до сих пор доступна эта возможность.
Всё что нужно сделать это создать xml со ссылками на каждый кадр:
И запустить анимацию (Здесь и далее все примеры будут приведены на Kotlin):
Сложные по графике анимации, небольших размеров и подготовленные во внешнем редакторе.
Возможность достичь любой сложности эффектов
Большое потребление ресурсов и, как следствие, довольно затратный импорт в приложение с возможностью получить OutOfMemory. Если по каким-то причинам вам нужно показывать большое количество кадров, то придётся писать свою реализацию с постепенной подгрузкой изображений в память. Но если так пришлось делать, возможно проще прибегнуть к видео?
2. Анимация свойств объекта (aka Property Animator)
Если нам нужно всего-лишь передвинуть что-нибудь на несколько пикселей в сторону или изменить прозрачность, чтобы не плодить миллион очень похожих друг на друга кадров на помощь приходит Animator. Фактически с помощью него можно анимировать любое свойство любых объектов.
Базовый абстрактный класс называется Animator, у него есть несколько наследников, нам важны:
ValueAnimator — позволяет анимировать любое свойство
ObjectAnimator — наследуется от ValueAnimator и имеет упрощённый интерфейс для анимации свойств View.
ViewPropertyAnimator — Предоставляет ещё один удобный интерфейс для анимации View. Не унаследован от Animator и используется в методе View::animate()
Анимацию выше можно описать как в коде:
так и в XML ( animator/open_animator.xml ):
Так-же есть возможность описать нашу анимацию переходов между стейтами View, что соответсвенно, с лёгкостью позволит создать анимированные переходы между стейтами у любых View. Описанная в XML анимация будет автоматически запущена при смене состояния View.
animator/state_animator.xml
Анимация View объектов и любых их параметров
Анимация любых других параметров
В некоторой степени требовательны к ресурсам
3. Анимация View (aka View animation)
До появления Animator в Android были только Animations. Основной недостаток которых был в том что они анимировали только представление вида и никак на самом деле не изменяли его свойства. Поэтому если хочется анимировать перемещение какого-либо элемента, то дополнительно по окончанию анимации нужно изменить ещё его свойства. Такой подход так или иначе не очень удобен, если вам нужна чуть более сложная анимация или нужно отлавливать нажатия в момент анимации.
Анимацию можно запустить как в коде:
так и в XML (обратите внимание, что синтаксис отличается от xml для Animator):
anim/open_animation.xml
Там, где API не позволяет использовать Animator.
Устаревший API, меняет только представление вида.
4. Анимация векторных ресурсов (aka AnimatedVectorDrawable)
На мой взгляд самая интересная часть в Android анимациях. Можно относительно малыми силами добиваться сложных и интересных эффектов. Трансформации иконок в Android сделаны именно так.
VectorDrawable состоит из Path и Group элементов. Создание анимации сводится к тому, чтобы прописать движение к этим элементам. Андроид на картинке выше, в коде будет выглядеть так:
Чтобы не писать XML вручную можно воспользоваться онлайн инструментом.
Начиная с API 25 векторные анимации отрисовываются в RenderThread, поэтому, даже если мы загрузим чем-то наш UI Thread (но мы же никогда так не делаем, да?), анимации всё равно будут проигрываться плавно.
Иконки
Анимационные эффекты
Нет возможности вручную управлять точкой анимации во времени (т.е. фактически отсутствует какой-либо метод, вроде setCurrentTime)
Источник
Basic Animation Of Android Views With Example
Building animation that makes on-screen objects seems alive may look like a high-level engineering at first, but you don’t need to 😰 fear. Animations were always holding off, not anymore. Android has a quite a few classes to help you create animation with relative ease.
Before to start, I just want to tell you that what are the properties of a view we can animate easily.
- alpha: Animate view’s transparency 0 stands for completely transparent and 1 stand to complete visibly.
- backgroundColor: You can animate the background color when changing the view color from some color to another random color.
- translations: Allows you to change the view position on a screen. When repositioning view on the screen you will use translationX and translationY.
- scale: Allows you to scale the view on x-axis and y-axis easily.
- rotation: Allows you to rotate the view on the screen. You can rotate the 360′ means full clockwise turn or opposite of clockwise.
Now let’s see them one by one how we can animate the view with the above properties.
1. Alpha
Instead of immediately set the alpha property to a view, which would cause it to blink from completely opaque to transparent, you should use animation.
In the demo, you see when we tap on the image(Batman) it slowly fades away over two seconds. The above animation is just made with three lines code. The following shows the fade away animation code.
The animate method returns a ViewPropertyAnimator object which can be used to animate specific property on this view. Later on, the alpha method sets the transparency to a specified view and finally, the duration method animate the requested properties in the given timespan.
2. Background Color
Animating a view is pretty awesome, but so far you’ve animate only view with transparency. Now it’s time to change the background color with animation, we can simply use ObjectAnimator and ArgbEvaluator class.
Below is the animating background color code.
The ObjectAnimator.ofObject takes the following arguments.
- linearLayout: The object whose property is to be animated.
- backgroundColor: The name of the property being animated.
- ArgbEvauator:This evaluator can be used to perform type interpolation between integer values that represent ARGB colors.
- Specify the colors start to end.
The repeatCount sets how many times you want to repeat this animation then the repeatMode which define what the animation needs to do when reaches to end. Finally, sets the duration and start the animation.
3. Translations
Like I said earlier, we use translations to change the view position from one point to another point. For the example, let’s see how we can slide the view on the x-axis with animation.
In the above demo, you see we’ve got the image(Batman) and when taps on an image it slides left. The following shows the slide left translation code.
The translationXBy reposition the specified view at x-axis from its current position to newly specified value and the duration method animate the x-axis translation in a given timespan.
Now let’s take another example, here, I want to animate the image at the bottom of the screen. Below is the sample code of y-axis translation animation.
The translationYBy reposition the specified view at y-axis from its current position to newly specified value. There are other methods of translation in ViewPropertyAnimator class I encouraged you to check it out.
4. Scale
It allows the views to scale by x-axis and y-axis independently, or you can call both with the same values to animate the view’s size. Now let’s say we want to shrink our image to half when the user taps on it.
Below is the sample code to scale the image to half of its size with animation.
The scaleX and scaleY methods scale the image on x-axis and y-axis respectively with the specified values in the timespan of two thousand milliseconds.
5. Rotation
Until now we’ve only animated the view position, scaling and setting the view transparency. Now it’s to see some rotation of view with animation. The rotation property also allows you to rotate in 3D. Let’s rotate our image in 360′ when the user presses on it.
The following shows the code of how to rotate the view in 360′.
The rotate method property rotates the view with the specified value.
Thanks for reading the article, any suggestions, comments, and corrections are always welcome. If you like it share it with Android community. Let’s share the knowledge as much as we can.
In the next article, we’ll see how we can animate multiple properties on a single view with AnimatorSet. See you in the next article…
Disclosure of Material Connection: Some of the links in the post above are “affiliate links.” This means if you click on the link and purchase the item, we will receive an affiliate commission. Regardless, we only recommend products or services we use personally and believe will add value to our readers.
Источник