Home | History | Annotate | Download | only in app
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.apis.app;
     18 
     19 // Need the following import to get access to the app resources, since this
     20 // class is in a sub-package.
     21 import com.example.android.apis.R;
     22 
     23 import android.app.Activity;
     24 import android.app.ActivityOptions;
     25 import android.content.Intent;
     26 import android.graphics.Bitmap;
     27 import android.graphics.Canvas;
     28 import android.os.Bundle;
     29 import android.util.Log;
     30 import android.view.View;
     31 import android.view.View.OnClickListener;
     32 import android.widget.Button;
     33 
     34 
     35 /**
     36  * <p>Example of using a custom animation when transitioning between activities.</p>
     37  */
     38 public class Animation extends Activity {
     39     private static final String TAG = "Animation";
     40 
     41     @Override
     42     protected void onCreate(Bundle savedInstanceState) {
     43         super.onCreate(savedInstanceState);
     44 
     45         setContentView(R.layout.activity_animation);
     46 
     47         // Watch for button clicks.
     48         Button button = (Button)findViewById(R.id.fade_animation);
     49         button.setOnClickListener(mFadeListener);
     50         button = (Button)findViewById(R.id.zoom_animation);
     51         button.setOnClickListener(mZoomListener);
     52         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
     53             button = (Button)findViewById(R.id.modern_fade_animation);
     54             button.setOnClickListener(mModernFadeListener);
     55             button = (Button)findViewById(R.id.modern_zoom_animation);
     56             button.setOnClickListener(mModernZoomListener);
     57             button = (Button)findViewById(R.id.scale_up_animation);
     58             button.setOnClickListener(mScaleUpListener);
     59             button = (Button)findViewById(R.id.zoom_thumbnail_animation);
     60             button.setOnClickListener(mZoomThumbnailListener);
     61             button = (Button)findViewById(R.id.no_animation);
     62             button.setOnClickListener(mNoAnimationListener);
     63         } else {
     64             findViewById(R.id.modern_fade_animation).setEnabled(false);
     65             findViewById(R.id.modern_zoom_animation).setEnabled(false);
     66             findViewById(R.id.scale_up_animation).setEnabled(false);
     67             findViewById(R.id.zoom_thumbnail_animation).setEnabled(false);
     68         }
     69     }
     70 
     71     @Override
     72     public void onEnterAnimationComplete() {
     73         Log.i(TAG, "onEnterAnimationComplete");
     74     }
     75 
     76     private OnClickListener mFadeListener = new OnClickListener() {
     77         public void onClick(View v) {
     78             Log.i(TAG, "Starting fade-in animation...");
     79             // Request the next activity transition (here starting a new one).
     80             startActivity(new Intent(Animation.this, AlertDialogSamples.class));
     81             // Supply a custom animation.  This one will just fade the new
     82             // activity on top.  Note that we need to also supply an animation
     83             // (here just doing nothing for the same amount of time) for the
     84             // old activity to prevent it from going away too soon.
     85             overridePendingTransition(R.anim.fade, R.anim.hold);
     86         }
     87     };
     88 
     89     private OnClickListener mZoomListener = new OnClickListener() {
     90         public void onClick(View v) {
     91             Log.i(TAG, "Starting zoom-in animation...");
     92             // Request the next activity transition (here starting a new one).
     93             startActivity(new Intent(Animation.this, AlertDialogSamples.class));
     94             // This is a more complicated animation, involving transformations
     95             // on both this (exit) and the new (enter) activity.  Note how for
     96             // the duration of the animation we force the exiting activity
     97             // to be Z-ordered on top (even though it really isn't) to achieve
     98             // the effect we want.
     99             overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
    100         }
    101     };
    102 
    103     private OnClickListener mModernFadeListener = new OnClickListener() {
    104         public void onClick(View v) {
    105             Log.i(TAG, "Starting modern-fade-in animation...");
    106             // Create the desired custom animation, involving transformations
    107             // on both this (exit) and the new (enter) activity.  Note how for
    108             // the duration of the animation we force the exiting activity
    109             // to be Z-ordered on top (even though it really isn't) to achieve
    110             // the effect we want.
    111             ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this,
    112                     R.anim.fade, R.anim.hold);
    113             // Request the activity be started, using the custom animation options.
    114             startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle());
    115         }
    116     };
    117 
    118     private OnClickListener mModernZoomListener = new OnClickListener() {
    119         public void onClick(View v) {
    120             Log.i(TAG, "Starting modern-zoom-in animation...");
    121             // Create a more complicated animation, involving transformations
    122             // on both this (exit) and the new (enter) activity.  Note how for
    123             // the duration of the animation we force the exiting activity
    124             // to be Z-ordered on top (even though it really isn't) to achieve
    125             // the effect we want.
    126             ActivityOptions opts = ActivityOptions.makeCustomAnimation(Animation.this,
    127                     R.anim.zoom_enter, R.anim.zoom_enter);
    128             // Request the activity be started, using the custom animation options.
    129             startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle());
    130         }
    131     };
    132 
    133     private OnClickListener mScaleUpListener = new OnClickListener() {
    134         public void onClick(View v) {
    135             Log.i(TAG, "Starting scale-up animation...");
    136             // Create a scale-up animation that originates at the button
    137             // being pressed.
    138             ActivityOptions opts = ActivityOptions.makeScaleUpAnimation(
    139                     v, 0, 0, v.getWidth(), v.getHeight());
    140             // Request the activity be started, using the custom animation options.
    141             startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle());
    142         }
    143     };
    144 
    145     private OnClickListener mZoomThumbnailListener = new OnClickListener() {
    146         public void onClick(View v) {
    147             Log.i(TAG, "Starting thumbnail-zoom animation...");
    148             // Create a thumbnail animation.  We are going to build our thumbnail
    149             // just from the view that was pressed.  We make sure the view is
    150             // not selected, because by the time the animation starts we will
    151             // have finished with the selection of the tap.
    152             v.setDrawingCacheEnabled(true);
    153             v.setPressed(false);
    154             v.refreshDrawableState();
    155             Bitmap bm = v.getDrawingCache();
    156             Canvas c = new Canvas(bm);
    157             //c.drawARGB(255, 255, 0, 0);
    158             ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation(
    159                     v, bm, 0, 0);
    160             // Request the activity be started, using the custom animation options.
    161             startActivity(new Intent(Animation.this, AlertDialogSamples.class), opts.toBundle());
    162             v.setDrawingCacheEnabled(false);
    163         }
    164     };
    165 
    166     private OnClickListener mNoAnimationListener = new OnClickListener() {
    167         public void onClick(View v) {
    168             Log.i(TAG, "Starting no animation transition...");
    169             // Request the next activity transition (here starting a new one).
    170             startActivity(new Intent(Animation.this, AlertDialogSamples.class));
    171             overridePendingTransition(0, 0);
    172         }
    173     };
    174 }
    175