Ever wondered how to do animations in your android app? In this tutorial I will show you how to do basic and custom animations such as Fade in, Fade out, Rotate and multi animations simultaneously. You may use to some of these animations in your apps to enhance your apps user experience. People love using apps with interactivity!!
Language: Java
Software: Android Studio 3.1
Software: Android Studio 3.1
Classes: MainActivity.java, activity_main.xml, fadein.xml, fadeout.xml, rotate.xml, customanim.xml, logo.png
CODE:
MainActivity.java
package com.subzdesigns.animationsandroid; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; /** * Created by Subz Designs. * Developed by Tansu Canturk */ import android.content.Intent; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.DecelerateInterpolator; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.util.Random; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView img_animation1 = (ImageView)findViewById(R.id.imgLogo); Button fadein = (Button) findViewById(R.id.fadein); Button fadeout = (Button) findViewById(R.id.fadeout); Button rotate = (Button) findViewById(R.id.rotate); Button customanim = (Button) findViewById(R.id.customanim); Button randombtn = (Button) findViewById(R.id.randombtn); fadein.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fadein)); } }); fadeout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fadeout)); } }); rotate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate)); } }); customanim.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.customanim)); } }); randombtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int min = 1; int max = 6; Random r = new Random(); int i1 = r.nextInt(max - min + 1) + min; if (i1 == 1) { Toast.makeText(getApplicationContext(), "Fade in", Toast.LENGTH_SHORT).show(); img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fadein)); } else if (i1 == 2) { Toast.makeText(getApplicationContext(), "Fade out", Toast.LENGTH_SHORT).show(); img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fadeout)); } else if (i1 == 3) { Toast.makeText(getApplicationContext(), "Rotate", Toast.LENGTH_SHORT).show(); img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate)); } else if (i1 == 4) { Toast.makeText(getApplicationContext(), "Rotate", Toast.LENGTH_SHORT).show(); img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate)); } else if (i1 == 5) { Toast.makeText(getApplicationContext(), "Custom", Toast.LENGTH_SHORT).show(); img_animation1.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.customanim)); } } }); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" tools:context="com.subzdesigns.animationsandroid.MainActivity"> <ImageView android:id="@+id/imgLogo" android:layout_width="wrap_content" android:layout_height="350dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:paddingLeft="50dp" android:paddingRight="50dp" android:src="@drawable/logo" /> <Button android:id="@+id/fadein" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_below="@+id/imgLogo" android:text="Fade in" /> <Button android:id="@+id/fadeout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_below="@+id/imgLogo" android:layout_marginStart="101dp" android:text="Fade out" /> <Button android:id="@+id/rotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_below="@+id/imgLogo" android:layout_marginEnd="94dp" android:text="Rotate" /> <Button android:id="@+id/customanim" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_below="@+id/imgLogo" android:text="Custom" /> <Button android:id="@+id/randombtn" android:layout_width="173dp" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="32dp" android:text="Random" /> </RelativeLayout>
fadein.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:duration="4000" android:fromAlpha="0.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="1.0" /> </set>
fadeout.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:duration="2000" android:fromAlpha="1.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="0.0" /> </set>
rotate.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:duration="1000" android:interpolator="@android:anim/cycle_interpolator" android:pivotX="50%" android:pivotY="50%" android:startOffset="800" android:repeatCount="1" android:repeatMode="restart" android:toDegrees="360" /> </set>
customanim.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:interpolator="@android:anim/linear_interpolator" > <translate android:duration="800" android:fillAfter="true" android:fromXDelta="0%p" android:startOffset="300" android:toXDelta="50%p" /> <translate android:duration="800" android:fillAfter="true" android:fromYDelta="0%p" android:startOffset="1100" android:toYDelta="90%p" /> <translate android:duration="800" android:fillAfter="true" android:fromXDelta="0%p" android:startOffset="1900" android:toXDelta="-75%p" /> <translate android:duration="800" android:fillAfter="true" android:fromYDelta="0%p" android:startOffset="2700" android:toYDelta="-90%p" /> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="1000" android:fromYDelta="40%" android:toYDelta="0" /> <translate android:startOffset="3100" android:duration="1000" android:fillAfter="true" android:fromYDelta="-80%" android:toYDelta="0" /> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0.5" android:toYScale="0.5" > </scale> <rotate android:startOffset="3500" android:duration="3000" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="restart" android:toDegrees="360" /> </set> </set> </set>
logo.png (Drawables)
Screenshots:
Source code: