Animações Fluídas no Android
Renato Peterman
Eu
• Indie

• Biticker - Cryptocurrencies Ticker App

• #1 (ou #2) top pagos Finanças Play Store

• #82 Top Finanças AppStore

• barcodr.co 

• iBafômetro iOS

• outros…

• Craftlog.com - Co-founder / Desenvolvedor

• AllTheCooks/Cookpad - Desenvolvimento móvel

• Time global (Estados Unidos, Espanha, Líbano, Indonesia, Japão, Brasil)

• Conex - Co-founder / Desenvolvedor
Animações Fluídas no Android - DevFestPR 17
• Property Animation (API Level 11 - Android 3+)
• View Animation
• Drawable Animations
• Physics-Based Animations (Support Library)
• Canvas, OpenGL e etc…
API’s
• API Level 11 - Android 3+
• ObjectAnimator

• ViewPropertyAnimator (API Level 12+) 😍
• ValueAnimator
• Alpha, TranslateY, TranslateX, ScaleX, ScaleY, Rotation, RotationX,
RotationY, X, Y…

• Animator class

• AnimatorSet
Property Animation
• Simples e Conveniente

• Fluent API

• myView.animate().alpha(1f).x(200);

• Apenas Views
ViewPropertyAnimator
• API Antiga

• <alpha>, <scale>, <translate>, <rotate> e <set>

• AnimationSet
• Animation class
View Animation
Animações Fluídas no Android - DevFestPR 17
Animações Fluídas no Android - DevFestPR 17
Animações e Propriedades
Alpha (Transparência)
Scale (Tamanho)
Rotation (Rotação)
Translation (Mover)Y
X
Interpolators
• LinearInterpolator

• AccelerateInterpolator

• DecelerateInterpolator

• AccelerateDecelerateInterpolator

• OvershootInterpolator

• AnticipateInterpolator
• AnticipateOvershootInterpolator

• BounceInterpolator

• FastOutLinearInInterpolator

• FastOutSlowInInterpolator

• LinearOutSlowInInterpolator
Interpolators
LinearInterpolator()
AccelerateInterpolator()
DecelerateInterpolator()
Animações Fluídas no Android - DevFestPR 17
Animações Fluídas no Android - DevFestPR 17
View Animation
View Animation
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration=“600"
android:fillAfter="true"
>
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.5"
/>
<translate
android:fromXDelta="0"
android:toXDelta=“90%p"
/>
</set>
/anim/translate_x_and_scale_view_animation.xml
View Animation
private View myView;
protected void playViewAnimation() {
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.translate_x_and_scale_view_animation);
myView.startAnimation(animation);
}
ObjectAnimator
ObjectAnimator (XML)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:valueFrom="0"
android:valueTo="250dp"
android:propertyName="translationX"
android:duration="600"
android:interpolator="@android:anim/linear_interpolator"
/>
<objectAnimator
android:valueFrom=“1.0”
android:valueTo=“0.5"
android:propertyName="alpha"
android:duration=“600"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
/>
</set>
/animator/rotate_and_translate_horizontal_object_animator.xml
ObjectAnimator (XML)
private View myView;
protected void playObjectAnimatorFromXml() {
// load the animator set
Animator animator = AnimatorInflater.loadAnimator(this,
R.animator.rotate_and_translate_horizontal_object_animator);
// set the view target
animator.setTarget(myView);
// play!
animator.start();
}
ObjectAnimator (Código)
private View myView;
// translation X animation
float positionStart = 0;
float positionEnd = Utils.dpToPx(this, 250);
Animator translationAnimator = ObjectAnimator.ofFloat(myView,
View.TRANSLATION_X,
positionStart,
positionEnd
);
ObjectAnimator (Código)
private View myView;
// rotation animation
float rotationStart = 0;
float rotationEnd = 720;
Animator rotationAnimator = ObjectAnimator.ofFloat(myView,
View.ROTATION,
rotationStart,
rotationEnd
);
ObjectAnimator (Código)
// play together
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(600); // 600 millisegundos
// executa as animacoes todas ao mesmo tempo
animatorSet.playTogether(translationAnimator, rotationAnimator);
animatorSet.start();
ObjectAnimator (Código)
protected void playObjectAnimatorFromCode() {
// translation X animation
float positionStart = 0;
float positionEnd = Utils.dpToPx(this, 250);
Animator translationAnimator = ObjectAnimator.ofFloat(myView,
View.TRANSLATION_X,
positionStart,
positionEnd
);
// rotation animation
float rotationStart = 0;
float rotationEnd = 720;
Animator rotationAnimator = ObjectAnimator.ofFloat(myView,
View.ROTATION,
rotationStart,
rotationEnd
);
// Animator setplay together
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(600); // 600 millisegundos
animatorSet.playTogether(translationAnimator, rotationAnimator);
animatorSet.start();
}
ViewPropertyAnimator
ViewPropertyAnimator
protected void playViewPropertyAnimator() {
float positionEnd = Utils.dpToPx(this, 250);
float rotationEnd = 720;
iconViewPropertyAnimator
.animate()
.setDuration(600)
.translationX(positionEnd)
.rotation(rotationEnd);
}
ValueAnimator
ValueAnimator (XML)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<animator
android:valueType="floatType"
android:valueFrom="0f"
android:valueTo="1f"
android:duration="600"
/>
</set>
/animator/alpha_value_animator.xml
ValueAnimator
private View myView;
protected void playAlphaValueAnimator() {
// carrega animacao do XML
/* ValueAnimator va = (ValueAnimator) AnimatorInflater
.loadAnimator(this, R.animator.alpha_value_animator); */
// cria objeto programaticamente
ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
va.setDuration(600);
va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float animatedValue = (float) valueAnimator.getAnimatedValue();
myView.setAlpha(animatedValue);
}
});
va.start();
}
• Animator.AnimatorListener
• onAnimationStart()

• onAnimationEnd()

• onAnimationRepeat()

• onAnimationCancel()

• ValueAnimator.AnimatorUpdateListener
• onAnimationUpdate()
Listeners
Physics-Based Animation
(aplicando física as animações)
• Support Library 25.4.0+
• Movimentos mais suaves e naturais
• Maior fluidez e responsividade
• Facebook Rebound
Physics-Based Animation
Support Library
dependencies {
compile "com.android.support:support-dynamic-animation:27.0.0"
}
Animações Fluídas no Android - DevFestPR 17
Animações Fluídas no Android - DevFestPR 17
• DynamicAnimation
• SpringAnimation
• SpringForce
• FlingAnimation
Classes
Exemplos
SpringAnimation FlingAnimation
• Damping ratio (amortecimento)
• DAMPING_RATIO_HIGH_BOUNCY (0.2f)
• DAMPING_RATIO_MEDIUM_BOUNCY (0.5f)
• DAMPING_RATIO_LOW_BOUNCY (0.75f)
• DAMPING_RATIO_NO_BOUNCY (1f)
• Stiffness (rigidez)
• STIFFNESS_HIGH (10.000f)
• STIFFNESS_MEDIUM (1500f)
• STIFFNESS_LOW (200f)
• STIFFNESS_VERY_LOW (50f)
SpringAnimation
Damping ratio (amortecimento)
High Bounce Medium Bounce Low Bounce No Bounce
Stiffness (Rigidez)
High Stiffness Medium Stiffness Low Stiffness Very Low Stiffness
SpringAnimation
private View myView;
private void createSimpleSpringAnimation() {
// calcula a posição Y - convert 100dp para pixels
float endPosition = Utils.dpToPx(this, 100);
// cria a animacao
SpringAnimation anim = new SpringAnimation(myView,
SpringAnimation.TRANSLATION_Y,
endPosition
);
// altera o damping (amortecimento)
anim.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY);
// altera o stiffness (rigidez)
anim.getSpring().setStiffness(SpringForce.STIFFNESS_LOW);
// inicia na animcação
anim.start();
}
FlingAnimation
FlingAnimation animation = new FlingAnimation(myView, DynamicAnimation.SCROLL_X);
animation.setStartVelocity(-velocityX)
.setMinValue(0)
.setMaxValue(maxScroll)
.setFriction(1.1f)
.start();
Animações Fluídas no Android - DevFestPR 17
• UI Thread: só o necessário!!!1!

• AnimatorSet

• ViewPropertyAnimator

🚫 Reflection

🚫 JNI

• Hardware acceleration
Dicas
• Android Animation and Graphics Guide
https://developer.android.com/guide/topics/graphics/index.html

• Introducing ViewPropertyAnimator
https://android-developers.googleblog.com/2011/05/introducing-
viewpropertyanimator.html

• Physics-based Animations
https://developer.android.com/guide/topics/graphics/physics-based-
animation.html
Referências
Dúvidas?
Animações Fluídas no Android - DevFestPR 17
Obrigado!
www.renatopeterman.com.br
@renatopeterman
github.com/renatopeterman

More Related Content

PPTX
Animations & swift
KEY
Animation in iOS
ODP
Android App Development - 12 animations
PDF
The world of Android Animations
PPTX
Unity 3D Runtime Animation Generation
KEY
Google I/O 2011, Android Honeycomb Highlights
PDF
Android RotateAnimation 簡介
PDF
Asynchronous Programming at Netflix
Animations & swift
Animation in iOS
Android App Development - 12 animations
The world of Android Animations
Unity 3D Runtime Animation Generation
Google I/O 2011, Android Honeycomb Highlights
Android RotateAnimation 簡介
Asynchronous Programming at Netflix

Similar to Animações Fluídas no Android - DevFestPR 17 (20)

PDF
How to React Native
PPTX
ProTips DroidCon Paris 2013
PPT
Getting the Magic on Android Tablets
PDF
libGDX: Scene2D
PPTX
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
PDF
Intro to HTML5
PPTX
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
PDF
Enhancing UI/UX using Java animations
KEY
Kinect de-theremin
PDF
async/await Revisited
PDF
Abc2011 yagi
PDF
GraphQL with Sangria
KEY
Intro to Game Programming
PPTX
Developing Social VR with Open Source Software
PPTX
Silverlight as a Gaming Platform
PPTX
Animation in android
PPTX
Basic Android Animation
PDF
Iphone Presentation for MuMe09
PPTX
React native introduction
PPTX
Android animations
How to React Native
ProTips DroidCon Paris 2013
Getting the Magic on Android Tablets
libGDX: Scene2D
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
Intro to HTML5
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
Enhancing UI/UX using Java animations
Kinect de-theremin
async/await Revisited
Abc2011 yagi
GraphQL with Sangria
Intro to Game Programming
Developing Social VR with Open Source Software
Silverlight as a Gaming Platform
Animation in android
Basic Android Animation
Iphone Presentation for MuMe09
React native introduction
Android animations
Ad

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles – August ’25 Week IV
PDF
UiPath Agentic Automation session 1: RPA to Agents
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
DOCX
Basics of Cloud Computing - Cloud Ecosystem
PDF
Convolutional neural network based encoder-decoder for efficient real-time ob...
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PDF
Comparative analysis of machine learning models for fake news detection in so...
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PPTX
Internet of Everything -Basic concepts details
PDF
4 layer Arch & Reference Arch of IoT.pdf
PDF
A review of recent deep learning applications in wood surface defect identifi...
PPTX
TEXTILE technology diploma scope and career opportunities
PPTX
Module 1 Introduction to Web Programming .pptx
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PDF
STKI Israel Market Study 2025 version august
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
The-Future-of-Automotive-Quality-is-Here-AI-Driven-Engineering.pdf
PDF
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
PDF
Enhancing plagiarism detection using data pre-processing and machine learning...
PDF
sbt 2.0: go big (Scala Days 2025 edition)
NewMind AI Weekly Chronicles – August ’25 Week IV
UiPath Agentic Automation session 1: RPA to Agents
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
Basics of Cloud Computing - Cloud Ecosystem
Convolutional neural network based encoder-decoder for efficient real-time ob...
Custom Battery Pack Design Considerations for Performance and Safety
Comparative analysis of machine learning models for fake news detection in so...
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Internet of Everything -Basic concepts details
4 layer Arch & Reference Arch of IoT.pdf
A review of recent deep learning applications in wood surface defect identifi...
TEXTILE technology diploma scope and career opportunities
Module 1 Introduction to Web Programming .pptx
sustainability-14-14877-v2.pddhzftheheeeee
STKI Israel Market Study 2025 version august
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
The-Future-of-Automotive-Quality-is-Here-AI-Driven-Engineering.pdf
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
Enhancing plagiarism detection using data pre-processing and machine learning...
sbt 2.0: go big (Scala Days 2025 edition)
Ad

Animações Fluídas no Android - DevFestPR 17

  • 1. Animações Fluídas no Android Renato Peterman
  • 2. Eu • Indie • Biticker - Cryptocurrencies Ticker App • #1 (ou #2) top pagos Finanças Play Store • #82 Top Finanças AppStore • barcodr.co • iBafômetro iOS • outros… • Craftlog.com - Co-founder / Desenvolvedor • AllTheCooks/Cookpad - Desenvolvimento móvel • Time global (Estados Unidos, Espanha, Líbano, Indonesia, Japão, Brasil) • Conex - Co-founder / Desenvolvedor
  • 4. • Property Animation (API Level 11 - Android 3+) • View Animation • Drawable Animations • Physics-Based Animations (Support Library) • Canvas, OpenGL e etc… API’s
  • 5. • API Level 11 - Android 3+ • ObjectAnimator • ViewPropertyAnimator (API Level 12+) 😍 • ValueAnimator • Alpha, TranslateY, TranslateX, ScaleX, ScaleY, Rotation, RotationX, RotationY, X, Y… • Animator class • AnimatorSet Property Animation
  • 6. • Simples e Conveniente • Fluent API • myView.animate().alpha(1f).x(200); • Apenas Views ViewPropertyAnimator
  • 7. • API Antiga • <alpha>, <scale>, <translate>, <rotate> e <set> • AnimationSet • Animation class View Animation
  • 15. Interpolators • LinearInterpolator • AccelerateInterpolator • DecelerateInterpolator • AccelerateDecelerateInterpolator • OvershootInterpolator • AnticipateInterpolator • AnticipateOvershootInterpolator • BounceInterpolator • FastOutLinearInInterpolator • FastOutSlowInInterpolator • LinearOutSlowInInterpolator
  • 20. View Animation <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration=“600" android:fillAfter="true" > <alpha android:fromAlpha="1.0" android:toAlpha="0.5" /> <translate android:fromXDelta="0" android:toXDelta=“90%p" /> </set> /anim/translate_x_and_scale_view_animation.xml
  • 21. View Animation private View myView; protected void playViewAnimation() { Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate_x_and_scale_view_animation); myView.startAnimation(animation); }
  • 23. ObjectAnimator (XML) <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:valueFrom="0" android:valueTo="250dp" android:propertyName="translationX" android:duration="600" android:interpolator="@android:anim/linear_interpolator" /> <objectAnimator android:valueFrom=“1.0” android:valueTo=“0.5" android:propertyName="alpha" android:duration=“600" android:interpolator="@android:anim/accelerate_decelerate_interpolator" /> </set> /animator/rotate_and_translate_horizontal_object_animator.xml
  • 24. ObjectAnimator (XML) private View myView; protected void playObjectAnimatorFromXml() { // load the animator set Animator animator = AnimatorInflater.loadAnimator(this, R.animator.rotate_and_translate_horizontal_object_animator); // set the view target animator.setTarget(myView); // play! animator.start(); }
  • 25. ObjectAnimator (Código) private View myView; // translation X animation float positionStart = 0; float positionEnd = Utils.dpToPx(this, 250); Animator translationAnimator = ObjectAnimator.ofFloat(myView, View.TRANSLATION_X, positionStart, positionEnd );
  • 26. ObjectAnimator (Código) private View myView; // rotation animation float rotationStart = 0; float rotationEnd = 720; Animator rotationAnimator = ObjectAnimator.ofFloat(myView, View.ROTATION, rotationStart, rotationEnd );
  • 27. ObjectAnimator (Código) // play together AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(600); // 600 millisegundos // executa as animacoes todas ao mesmo tempo animatorSet.playTogether(translationAnimator, rotationAnimator); animatorSet.start();
  • 28. ObjectAnimator (Código) protected void playObjectAnimatorFromCode() { // translation X animation float positionStart = 0; float positionEnd = Utils.dpToPx(this, 250); Animator translationAnimator = ObjectAnimator.ofFloat(myView, View.TRANSLATION_X, positionStart, positionEnd ); // rotation animation float rotationStart = 0; float rotationEnd = 720; Animator rotationAnimator = ObjectAnimator.ofFloat(myView, View.ROTATION, rotationStart, rotationEnd ); // Animator setplay together AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(600); // 600 millisegundos animatorSet.playTogether(translationAnimator, rotationAnimator); animatorSet.start(); }
  • 30. ViewPropertyAnimator protected void playViewPropertyAnimator() { float positionEnd = Utils.dpToPx(this, 250); float rotationEnd = 720; iconViewPropertyAnimator .animate() .setDuration(600) .translationX(positionEnd) .rotation(rotationEnd); }
  • 32. ValueAnimator (XML) <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <animator android:valueType="floatType" android:valueFrom="0f" android:valueTo="1f" android:duration="600" /> </set> /animator/alpha_value_animator.xml
  • 33. ValueAnimator private View myView; protected void playAlphaValueAnimator() { // carrega animacao do XML /* ValueAnimator va = (ValueAnimator) AnimatorInflater .loadAnimator(this, R.animator.alpha_value_animator); */ // cria objeto programaticamente ValueAnimator va = ValueAnimator.ofFloat(0f, 1f); va.setDuration(600); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float animatedValue = (float) valueAnimator.getAnimatedValue(); myView.setAlpha(animatedValue); } }); va.start(); }
  • 34. • Animator.AnimatorListener • onAnimationStart() • onAnimationEnd() • onAnimationRepeat() • onAnimationCancel() • ValueAnimator.AnimatorUpdateListener • onAnimationUpdate() Listeners
  • 36. • Support Library 25.4.0+ • Movimentos mais suaves e naturais • Maior fluidez e responsividade • Facebook Rebound Physics-Based Animation
  • 37. Support Library dependencies { compile "com.android.support:support-dynamic-animation:27.0.0" }
  • 40. • DynamicAnimation • SpringAnimation • SpringForce • FlingAnimation Classes
  • 42. • Damping ratio (amortecimento) • DAMPING_RATIO_HIGH_BOUNCY (0.2f) • DAMPING_RATIO_MEDIUM_BOUNCY (0.5f) • DAMPING_RATIO_LOW_BOUNCY (0.75f) • DAMPING_RATIO_NO_BOUNCY (1f) • Stiffness (rigidez) • STIFFNESS_HIGH (10.000f) • STIFFNESS_MEDIUM (1500f) • STIFFNESS_LOW (200f) • STIFFNESS_VERY_LOW (50f) SpringAnimation
  • 43. Damping ratio (amortecimento) High Bounce Medium Bounce Low Bounce No Bounce
  • 44. Stiffness (Rigidez) High Stiffness Medium Stiffness Low Stiffness Very Low Stiffness
  • 45. SpringAnimation private View myView; private void createSimpleSpringAnimation() { // calcula a posição Y - convert 100dp para pixels float endPosition = Utils.dpToPx(this, 100); // cria a animacao SpringAnimation anim = new SpringAnimation(myView, SpringAnimation.TRANSLATION_Y, endPosition ); // altera o damping (amortecimento) anim.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY); // altera o stiffness (rigidez) anim.getSpring().setStiffness(SpringForce.STIFFNESS_LOW); // inicia na animcação anim.start(); }
  • 46. FlingAnimation FlingAnimation animation = new FlingAnimation(myView, DynamicAnimation.SCROLL_X); animation.setStartVelocity(-velocityX) .setMinValue(0) .setMaxValue(maxScroll) .setFriction(1.1f) .start();
  • 48. • UI Thread: só o necessário!!!1! • AnimatorSet • ViewPropertyAnimator 🚫 Reflection 🚫 JNI • Hardware acceleration Dicas
  • 49. • Android Animation and Graphics Guide https://developer.android.com/guide/topics/graphics/index.html • Introducing ViewPropertyAnimator https://android-developers.googleblog.com/2011/05/introducing- viewpropertyanimator.html • Physics-based Animations https://developer.android.com/guide/topics/graphics/physics-based- animation.html Referências