SlideShare a Scribd company logo
Animations
Android
Константин Золотов
План
Animation Frameworks (Drawable Animations, View Animations, Propertry Animations)
Layout Transitions (Layout Animations, Transitions Framework)
Window Transitions (Custom Animations, Shared Elements)
Moar (Ripples, Reveals, Links)
Animation Frameworks
Drawable Animations - покадровая анимация
View Animations - анимация отображения view
Property Animations - изменение свойств
Drawable Animations
Разметка:
1 <animation-list xmlns:android="http://schemas.android.com/apk/res/android">
2 <item android:drawable="@drawable/smile1" android:duration="200"/>
3 <item android:drawable="@drawable/smile2" android:duration="200"/>
4 <item android:drawable="@drawable/smile3" android:duration="200"/>
5 </animation-list>
Код:
1 AnimationDrawable mAnimation = new AnimationDrawable();
2 // устанавливаем циклическое повторение анимации
3 mAnimation.setOneShot(false);
4 mAnimation.addFrame(smile1, 250);
5 mAnimation.addFrame(smile1, 250);
6
7 AnimationDrawable animation = (AnimationDrawable)image.getBackground();
8 animation.start()
+/- Drawable Animations
сложные анимации
сложно создавать и поддерживать
много ресурсов -> долгие билды, больший вес выходного файла
View Animations
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http://schemas.android.com/apk/res/android"
3 android:fillAfter="true" >
4 <alpha
5 android:duration="1000"
6 android:fromAlpha="1.0"
7 android:interpolator="@android:anim/accelerate_interpolator"
8 android:toAlpha="0.0" />
9 </set>
Animation anim = AnimationUtils.loadAnimation(this, R.anim.test);
view.startAnimation(anim);
Чем плоха система
анимировать можно только Views
только простейшие преобразования (alpha, translate, scale, rotate)
объект анимации остается неизменным
Property Animations
1 ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
2 animation.setDuration(1000);
3 animation.start();
4
5 ObjectAnimator anim = ObjectAnimator.ofFloat(shape, "translationX",300);
6 anim.start();
Интерполяторы
Change Fragment animation
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
1 <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
2 android:interpolator="@android:interpolator/accelerate_quad"
3 android:valueFrom="0"
4 android:valueTo="1"
5 android:propertyName="alpha"
6 android:duration="@android:integer/config_mediumAnimTime" />
Animating Layout Changes
1 <LinearLayout android:id="@+id/container"
2 android:animateLayoutChanges="true"
3 ...
4 />
Transitions Framework
Создание сцен
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/master_layout">
3 <TextView
4 android:id="@+id/title"
5 ...
6 android:text="Title"/>
7 <FrameLayout
8 android:id="@+id/scene_root">
9 <include layout="@layout/a_scene" />
10 </FrameLayout>
11 </LinearLayout>
mSceneRoot = (ViewGroup) ndViewById(R.id.scene_root);
Создание сцен
сцена 1
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/scene_container"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent" >
5 <View
6 android:width="10dp"
7 android:height="10dp"
8 android:id="@+id/view1 />
9 </RelativeLayout>
сцена 2
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:id="@+id/scene_container"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent" >
5 android:width="100dp"
6 android:height="100dp"
7 android:id="@+id/view1 />
Создание сцены из Layout
1 Scene mAScene;
2 Scene mAnotherScene;
3
4 // Create the scenes
5 mAScene = Scene.getSceneForLayout(mSceneRoot, R.layout.a_scene, this);
6 mAnotherScene =
7 Scene.getSceneForLayout(mSceneRoot, R.layout.another_scene, this);
Создание Transition
1. Добавить директорию res/transition/
2. Добавить xml файл (res/transition/fade_transition.xml)
<fade xmlns:android="http://schemas.android.com/apk/res/android" />
Transition mFadeTransition = TransitionInflater.from(this).
inflateTransition(R.transition.fade_transition);
3. Создать из кода Transition mFadeTransition = new Fade();
Использование Transition
1. Сцены
TransitionManager.go(mEndingScene, mFadeTransition);
1. Вне сцен
TransitionManager.beginDelayedTransition(mRootView, mFade); mRootView.addView(mLabelText);
Shared element
1 final View imgContainerView = findViewById(R.id.img_container);
2
3 // get the common element for the transition in this activity
4 final View androidRobotView = findViewById(R.id.image_small);
5
6 // define a click listener
7 imgContainerView.setOnClickListener(new View.OnClickListener() {
8 @Override
9 public void onClick(View view) {
10 Intent intent = new Intent(this, Activity2.class);
11 // create the transition animation - the images in the layouts
12 // of both activities are defined with android:transitionName="robot"
13 ActivityOptions options = ActivityOptions
14 .makeSceneTransitionAnimation(this, androidRobotView, "robot");
15 // start the new activity
16 startActivity(intent, options.toBundle());
17 }
18 });
Animate View State Changes
1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
2 <item android:state_pressed="true">
3 <set>
4 <objectAnimator android:propertyName="translationZ"
5 android:duration="@android:integer/config_shortAnimTime"
6 android:valueTo="2dp"
7 android:valueType="floatType"/>
8 </set>
9 </item>
10 <item android:state_enabled="true"
11 android:state_pressed="false"
12 android:state_focused="true">
13 <set>
14 <objectAnimator android:propertyName="translationZ"
15 android:duration="100"
16 android:valueTo="0"
17 android:valueType="floatType"/>
18 </set>
19 </item>
20 </selector>
Ripples
1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
2 <item android:state_selected="true"
android:drawable="@drawable/circular_button_selected"/>
3 <item android:drawable="@drawable/circular_button"/>
4 </selector>
5
6 <ripple android:color="#ffff0000">
7 </ripple>
Circular Reveal
1 int finalRadius = Math.hypot(myView.getWidth(), myView.getHeight());
2
3 // create the animator for this view (the start radius is zero)
4 Animator anim =
5 ViewAnimationUtils.createCircularReveal(myView, 0, 0, 0, finalRadius);
6 anim.start();
Полезные ссылки
View animation
View animation examples
Material animations
Shared Element Activity Transition
Transitions
Android arsenal

More Related Content

Viewers also liked

Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
Noveo
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)Антон Звонов
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)
Noveo
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
Noveo
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Denis Vasilyev
 
Lec 13
Lec 13Lec 13
Lec 9
Lec 9Lec 9
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
Noveo
 
Canvas
CanvasCanvas
Lec 10
Lec 10Lec 10
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
Noveo
 
Lec 12
Lec 12Lec 12
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
Noveo
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Denis Vasilyev
 
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Denis Vasilyev
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
Noveo
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Noveo
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
Noveo
 

Viewers also liked (19)

Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
Webinar: Использование UWP/WinRT Contracts и Notification в Windows 10
 
Lec 13
Lec 13Lec 13
Lec 13
 
Lec 9
Lec 9Lec 9
Lec 9
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
Canvas
CanvasCanvas
Canvas
 
Lec 10
Lec 10Lec 10
Lec 10
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 
Lec 12
Lec 12Lec 12
Lec 12
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
 
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
 
Views обзор
Views обзорViews обзор
Views обзор
 

Similar to Animations (Lecture 17 – animations)

2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
Омские ИТ-субботники
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
DataArt
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
metaform
 
Android Transition - плавные переходы на Android
 Android Transition - плавные переходы на Android Android Transition - плавные переходы на Android
Android Transition - плавные переходы на Android
Artem Shevchenko
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Technopark
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Yandex
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
DevDay
 
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
HappyDev
 
Не JS во фронтенде
Не JS во фронтендеНе JS во фронтенде
Не JS во фронтенде
Nitive
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
Andrii Dzynia
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"MobiDev
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
Oleksii Okhrymenko
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Ontico
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv Startup Club
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраYandex
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
Sergiy Shychynov
 

Similar to Animations (Lecture 17 – animations) (20)

2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Android Transition - плавные переходы на Android
 Android Transition - плавные переходы на Android Android Transition - плавные переходы на Android
Android Transition - плавные переходы на Android
 
Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1Frontend весна 2014 лекция 1
Frontend весна 2014 лекция 1
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
 
CSS3 Animations
CSS3 AnimationsCSS3 Animations
CSS3 Animations
 
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
 
Не JS во фронтенде
Не JS во фронтендеНе JS во фронтенде
Не JS во фронтенде
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
Lviv MDDay 2014. Олександр Зозуля “Google карти для android”
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометра
 
Enterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russianEnterprise flex pure mvc, slides, russian
Enterprise flex pure mvc, slides, russian
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
Noveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo
 
Yii2
Yii2Yii2
Yii2
Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
Noveo
 
Rest
RestRest
Rest
Noveo
 
PHP basic
PHP basicPHP basic
PHP basic
Noveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
Noveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo
 
MySQL
MySQLMySQL
MySQL
Noveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
Noveo
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Noveo
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
Noveo
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QR
Noveo
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
Noveo
 

More from Noveo (18)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QR
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 

Animations (Lecture 17 – animations)

  • 2. План Animation Frameworks (Drawable Animations, View Animations, Propertry Animations) Layout Transitions (Layout Animations, Transitions Framework) Window Transitions (Custom Animations, Shared Elements) Moar (Ripples, Reveals, Links)
  • 3. Animation Frameworks Drawable Animations - покадровая анимация View Animations - анимация отображения view Property Animations - изменение свойств
  • 4. Drawable Animations Разметка: 1 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:drawable="@drawable/smile1" android:duration="200"/> 3 <item android:drawable="@drawable/smile2" android:duration="200"/> 4 <item android:drawable="@drawable/smile3" android:duration="200"/> 5 </animation-list> Код: 1 AnimationDrawable mAnimation = new AnimationDrawable(); 2 // устанавливаем циклическое повторение анимации 3 mAnimation.setOneShot(false); 4 mAnimation.addFrame(smile1, 250); 5 mAnimation.addFrame(smile1, 250); 6 7 AnimationDrawable animation = (AnimationDrawable)image.getBackground(); 8 animation.start()
  • 5. +/- Drawable Animations сложные анимации сложно создавать и поддерживать много ресурсов -> долгие билды, больший вес выходного файла
  • 6. View Animations 1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" 3 android:fillAfter="true" > 4 <alpha 5 android:duration="1000" 6 android:fromAlpha="1.0" 7 android:interpolator="@android:anim/accelerate_interpolator" 8 android:toAlpha="0.0" /> 9 </set> Animation anim = AnimationUtils.loadAnimation(this, R.anim.test); view.startAnimation(anim);
  • 7. Чем плоха система анимировать можно только Views только простейшие преобразования (alpha, translate, scale, rotate) объект анимации остается неизменным
  • 8. Property Animations 1 ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); 2 animation.setDuration(1000); 3 animation.start(); 4 5 ObjectAnimator anim = ObjectAnimator.ofFloat(shape, "translationX",300); 6 anim.start();
  • 10. Change Fragment animation ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); 1 <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 2 android:interpolator="@android:interpolator/accelerate_quad" 3 android:valueFrom="0" 4 android:valueTo="1" 5 android:propertyName="alpha" 6 android:duration="@android:integer/config_mediumAnimTime" />
  • 11. Animating Layout Changes 1 <LinearLayout android:id="@+id/container" 2 android:animateLayoutChanges="true" 3 ... 4 />
  • 13. Создание сцен 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/master_layout"> 3 <TextView 4 android:id="@+id/title" 5 ... 6 android:text="Title"/> 7 <FrameLayout 8 android:id="@+id/scene_root"> 9 <include layout="@layout/a_scene" /> 10 </FrameLayout> 11 </LinearLayout> mSceneRoot = (ViewGroup) ndViewById(R.id.scene_root);
  • 14. Создание сцен сцена 1 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/scene_container" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" > 5 <View 6 android:width="10dp" 7 android:height="10dp" 8 android:id="@+id/view1 /> 9 </RelativeLayout> сцена 2 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:id="@+id/scene_container" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" > 5 android:width="100dp" 6 android:height="100dp" 7 android:id="@+id/view1 />
  • 15. Создание сцены из Layout 1 Scene mAScene; 2 Scene mAnotherScene; 3 4 // Create the scenes 5 mAScene = Scene.getSceneForLayout(mSceneRoot, R.layout.a_scene, this); 6 mAnotherScene = 7 Scene.getSceneForLayout(mSceneRoot, R.layout.another_scene, this);
  • 16. Создание Transition 1. Добавить директорию res/transition/ 2. Добавить xml файл (res/transition/fade_transition.xml) <fade xmlns:android="http://schemas.android.com/apk/res/android" /> Transition mFadeTransition = TransitionInflater.from(this). inflateTransition(R.transition.fade_transition); 3. Создать из кода Transition mFadeTransition = new Fade();
  • 17. Использование Transition 1. Сцены TransitionManager.go(mEndingScene, mFadeTransition); 1. Вне сцен TransitionManager.beginDelayedTransition(mRootView, mFade); mRootView.addView(mLabelText);
  • 18. Shared element 1 final View imgContainerView = findViewById(R.id.img_container); 2 3 // get the common element for the transition in this activity 4 final View androidRobotView = findViewById(R.id.image_small); 5 6 // define a click listener 7 imgContainerView.setOnClickListener(new View.OnClickListener() { 8 @Override 9 public void onClick(View view) { 10 Intent intent = new Intent(this, Activity2.class); 11 // create the transition animation - the images in the layouts 12 // of both activities are defined with android:transitionName="robot" 13 ActivityOptions options = ActivityOptions 14 .makeSceneTransitionAnimation(this, androidRobotView, "robot"); 15 // start the new activity 16 startActivity(intent, options.toBundle()); 17 } 18 });
  • 19. Animate View State Changes 1 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:state_pressed="true"> 3 <set> 4 <objectAnimator android:propertyName="translationZ" 5 android:duration="@android:integer/config_shortAnimTime" 6 android:valueTo="2dp" 7 android:valueType="floatType"/> 8 </set> 9 </item> 10 <item android:state_enabled="true" 11 android:state_pressed="false" 12 android:state_focused="true"> 13 <set> 14 <objectAnimator android:propertyName="translationZ" 15 android:duration="100" 16 android:valueTo="0" 17 android:valueType="floatType"/> 18 </set> 19 </item> 20 </selector>
  • 20. Ripples 1 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:state_selected="true" android:drawable="@drawable/circular_button_selected"/> 3 <item android:drawable="@drawable/circular_button"/> 4 </selector> 5 6 <ripple android:color="#ffff0000"> 7 </ripple>
  • 21. Circular Reveal 1 int finalRadius = Math.hypot(myView.getWidth(), myView.getHeight()); 2 3 // create the animator for this view (the start radius is zero) 4 Animator anim = 5 ViewAnimationUtils.createCircularReveal(myView, 0, 0, 0, finalRadius); 6 anim.start();
  • 22. Полезные ссылки View animation View animation examples Material animations Shared Element Activity Transition Transitions Android arsenal