SlideShare a Scribd company logo
1 of 52
Download to read offline
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
• 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 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()
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"
}
• 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();
• 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?
Obrigado!
www.renatopeterman.com.br
@renatopeterman
github.com/renatopeterman

More Related Content

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

ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013Mathias Seguy
 
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015Mathias Seguy
 
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)Mathias Seguy
 
Enhancing UI/UX using Java animations
Enhancing UI/UX using Java animationsEnhancing UI/UX using Java animations
Enhancing UI/UX using Java animationsNaman Dwivedi
 
async/await Revisited
async/await Revisitedasync/await Revisited
async/await RevisitedRiza Fahmi
 
Intro to Game Programming
Intro to Game ProgrammingIntro to Game Programming
Intro to Game ProgrammingRichard Jones
 
Developing Social VR with Open Source Software
Developing Social VR with Open Source SoftwareDeveloping Social VR with Open Source Software
Developing Social VR with Open Source SoftwareLiv Erickson
 
Silverlight as a Gaming Platform
Silverlight as a Gaming PlatformSilverlight as a Gaming Platform
Silverlight as a Gaming Platformgoodfriday
 
Animation in android
Animation in androidAnimation in android
Animation in androidJatin_123
 
Basic Android Animation
Basic Android Animation Basic Android Animation
Basic Android Animation Shilu Shrestha
 
Iphone Presentation for MuMe09
Iphone Presentation for MuMe09Iphone Presentation for MuMe09
Iphone Presentation for MuMe09Gonzalo Parra
 
React native introduction
React native introductionReact native introduction
React native introductionInnerFood
 
Android animations
Android animationsAndroid animations
Android animationsKumar
 

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

How to React Native
How to React NativeHow to React Native
How to React Native
 
ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013ProTips DroidCon Paris 2013
ProTips DroidCon Paris 2013
 
Getting the Magic on Android Tablets
Getting the Magic on Android TabletsGetting the Magic on Android Tablets
Getting the Magic on Android Tablets
 
libGDX: Scene2D
libGDX: Scene2DlibGDX: Scene2D
libGDX: Scene2D
 
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
Animate Me! if you don't do it for me, do it for Chet - DroidconLondon2015
 
Intro to HTML5
Intro to HTML5Intro to HTML5
Intro to HTML5
 
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
Animate Me, if you don't do it for me do it for chet (DroidCon Paris)
 
Enhancing UI/UX using Java animations
Enhancing UI/UX using Java animationsEnhancing UI/UX using Java animations
Enhancing UI/UX using Java animations
 
Kinect de-theremin
Kinect de-thereminKinect de-theremin
Kinect de-theremin
 
async/await Revisited
async/await Revisitedasync/await Revisited
async/await Revisited
 
Abc2011 yagi
Abc2011 yagiAbc2011 yagi
Abc2011 yagi
 
GraphQL with Sangria
GraphQL with SangriaGraphQL with Sangria
GraphQL with Sangria
 
Intro to Game Programming
Intro to Game ProgrammingIntro to Game Programming
Intro to Game Programming
 
Developing Social VR with Open Source Software
Developing Social VR with Open Source SoftwareDeveloping Social VR with Open Source Software
Developing Social VR with Open Source Software
 
Silverlight as a Gaming Platform
Silverlight as a Gaming PlatformSilverlight as a Gaming Platform
Silverlight as a Gaming Platform
 
Animation in android
Animation in androidAnimation in android
Animation in android
 
Basic Android Animation
Basic Android Animation Basic Android Animation
Basic Android Animation
 
Iphone Presentation for MuMe09
Iphone Presentation for MuMe09Iphone Presentation for MuMe09
Iphone Presentation for MuMe09
 
React native introduction
React native introductionReact native introduction
React native introduction
 
Android animations
Android animationsAndroid animations
Android animations
 

Recently uploaded

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 

Recently uploaded (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 

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
  • 3.
  • 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
  • 8.
  • 9.
  • 15. Interpolators • LinearInterpolator • AccelerateInterpolator • DecelerateInterpolator • AccelerateDecelerateInterpolator • OvershootInterpolator • AnticipateInterpolator • AnticipateOvershootInterpolator • BounceInterpolator • FastOutLinearInInterpolator • FastOutSlowInInterpolator • LinearOutSlowInInterpolator
  • 17.
  • 18.
  • 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" }
  • 38.
  • 39.
  • 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();
  • 47.
  • 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
  • 51.