Thursday, April 25, 2013

Custom Animation while switching Activity, using overridePendingTransition()

Call overridePendingTransition(int enterAnim, int exitAnim) immediately after startActivity(Intent) or finish() to specify an explicit transition animation to perform next.


Create animation XMLs in /res/anim/ folder.

/res/anim/left_out.xml
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/linear_interpolator">  
  <translate 
      android:fromXDelta="0" 
      android:toXDelta="-100%p" 
      android:duration="500"/>
</set> 


/res/anim/right_in.xml
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/linear_interpolator">  
  <translate 
      android:fromXDelta="100%p" 
      android:toXDelta="0" 
      android:duration="500"/>
</set>  


/res/anim/top_out.xml
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/linear_interpolator">  
  <translate 
      android:fromYDelta="0" 
      android:toYDelta="-100%p" 
      android:duration="500"/>
</set> 


/res/anim/bottom_in.xml
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/linear_interpolator">  
  <translate 
      android:fromYDelta="100%p" 
      android:toYDelta="0" 
      android:duration="500"/>
</set> 


MainActivity.java
package com.example.androidactivityanimation;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  Button switchButton = (Button)findViewById(R.id.switchbutton);
  switchButton.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View arg0) {
    Intent intent = new Intent();
    intent.setClass(MainActivity.this, Activity2.class);
    startActivity(intent);
    overridePendingTransition(R.anim.right_in, R.anim.left_out);
   }});
 }

}


/res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    <Button
        android:id="@+id/switchbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Switch Activity2" />
        

</LinearLayout>


Activity2.java
package com.example.androidactivityanimation;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Activity2 extends Activity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layout2);
  
  Button backButton = (Button)findViewById(R.id.backbutton);
  backButton.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    finish();
    overridePendingTransition(R.anim.bottom_in, R.anim.top_out);
   }});
 }

}


/res/layout/layout2.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Activity2" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher"/>
    <Button
        android:id="@+id/backbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Back" />
    
</RelativeLayout>


AndroidManifest.xml have to be modified to add <activity> of Activity2.

download filesDownload the files.

Related:
- Start Animation in Activity start

9 comments:

amirfazwan said...

thanks

Ahmed Wafa said...

Hi, I deployed your app to my phone but the activity switches are done without the sliding animation. Any ideas why might this be?

Anonymous said...

I also see no animations.

Bruno Alassia said...

Works perfect!

Mayur Patanvadiya said...

Awesome Code...

Just Implemented it into My App..
Working 100 % Fine..
Thanks for the short & sweet Code... :)

gaurav jain said...

Animation is not working

Kushal Choudhary said...

Ya Right this animation not working in my s4 , mi4 why ..?

But its working in genymotion emulator ..tell me asap thanks
kushalw3t@gmail.com

hem bodakiya said...

nice one it's work Thanks Dude.......

Mh Emon said...

it,s not working..