Harlan-宋海青 发表于 2013-1-3 16:58:42

Android实例(区域显示或隐藏加翻页动画)

Android实例(区域显示或隐藏加翻页动画)

<div id="cnblogs_post_body">
我们经常会让一块区显示或者隐藏,但是setVisibility VISIBLE或者GONE的话有点单调,所以加上一个翻页动画会比较好看。
效果图
http://pic002.cnblogs.com/images/2012/338120/2012111716211579.png
http://pic002.cnblogs.com/images/2012/338120/2012111716220234.png
http://pic002.cnblogs.com/images/2012/338120/2012111716221485.png
代码
AnimationActivity.java
<div class="cnblogs_code">1 package com.android.animation;2 import android.app.Activity;3 import android.os.Bundle;4 import android.view.View;5 import android.view.ViewGroup;6 import android.view.animation.AccelerateInterpolator;7 import android.view.animation.Animation;8 import android.view.animation.DecelerateInterpolator;9 import android.widget.AdapterView; 10 import android.widget.AdapterView.OnItemClickListener; 11 import android.widget.ArrayAdapter; 12 import android.widget.ImageView; 13 import android.widget.ListView; 14 15 public class AnimationActivity extends Activity { 16   private ListView mPhotosList; 17   private ViewGroup mContainer; 18   private ImageView mImageView; 19       private static final String[] PHOTOS_NAMES = new String[] { 20         "num one", 21         "num two", 22         "num three", 23         "num fore", 24         "num five", 25         "num six" 26 }; 27       private static final int[] PHOTOS_RESOURCES = new int[] { 28           R.drawable.photo1, 29           R.drawable.photo2, 30           R.drawable.photo3, 31           R.drawable.photo4, 32           R.drawable.photo5, 33           R.drawable.photo6 34 }; 35     @Override 36   public void onCreate(Bundle savedInstanceState) { 37         super.onCreate(savedInstanceState); 38       setContentView(R.layout.animations_main_screen); 39         mPhotosList = (ListView) findViewById(android.R.id.list); 40         mImageView = (ImageView) findViewById(R.id.picture); 41         mContainer = (ViewGroup) findViewById(R.id.container); 42 43         // Prepare the ListView 44         final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 45                 android.R.layout.simple_list_item_1, PHOTOS_NAMES); 46 47       mPhotosList.setAdapter(adapter); 48       mPhotosList.setOnItemClickListener(listener); 49         // Prepare the ImageView 50         mImageView.setClickable(true); 51         mImageView.setFocusable(true); 52       mImageView.setOnClickListener(viewlistener); 53     } 54   private AdapterView.OnItemClickListener listener=new OnItemClickListener() { 55 56       @Override 57         public void onItemClick(AdapterView arg0, View arg1, int arg2, 58               long arg3) { 59              mImageView.setImageResource(PHOTOS_RESOURCES); 60               applyRotation(arg2, 0, 90); 61             62       } 63     }; 64   private View.OnClickListener viewlistener=new View.OnClickListener() { 65          66       @Override 67         public void onClick(View v) { 68            applyRotation(-1, 180, 90); 69       } 70     }; 71   private void applyRotation(int position, float start, float end) { 72         // Find the center of the container 73         final float centerX = mContainer.getWidth() / 2.0f; 74         final float centerY = mContainer.getHeight() / 2.0f; 75 76         // Create a new 3D rotation with the supplied parameter 77         // The animation listener is used to trigger the next animation 78         final Rotate3dAnimation rotation = 79               new Rotate3dAnimation(start, end, centerX, centerY, 310.0f, true); 80         rotation.setDuration(500); 81         rotation.setFillAfter(true); 82         rotation.setInterpolator(new AccelerateInterpolator()); 83         rotation.setAnimationListener(new DisplayNextView(position)); 84 85       mContainer.startAnimation(rotation); 86     } 87    88   private final class DisplayNextView implements Animation.AnimationListener { 89         private final int mPosition; 90 91         private DisplayNextView(int position) { 92             mPosition = position; 93       } 94 95         public void onAnimationStart(Animation animation) { 96       } 97 98         public void onAnimationEnd(Animation animation) { 99             mContainer.post(new SwapViews(mPosition));100       }101 102         public void onAnimationRepeat(Animation animation) {103       }104     }105   private final class SwapViews implements Runnable {106         private final int mPosition;107 108         public SwapViews(int position) {109             mPosition = position;110       }111 112         public void run() {113             final float centerX = mContainer.getWidth() / 2.0f;114             final float centerY = mContainer.getHeight() / 2.0f;115             Rotate3dAnimation rotation;116             117             if (mPosition > -1) {118                 mPhotosList.setVisibility(View.GONE);119                 mImageView.setVisibility(View.VISIBLE);120                 mImageView.requestFocus();121 122               rotation = new Rotate3dAnimation(90, 180, centerX, centerY, 310.0f, false);123             } else {124                 mImageView.setVisibility(View.GONE);125                 mPhotosList.setVisibility(View.VISIBLE);126                 mPhotosList.requestFocus();127 128               rotation = new Rotate3dAnimation(90, 0, centerX, centerY, 310.0f, false);129             }130 131             rotation.setDuration(500);132             rotation.setFillAfter(true);133             rotation.setInterpolator(new DecelerateInterpolator());134             mContainer.startAnimation(rotation);135       }136     }137 }
页: [1]
查看完整版本: Android实例(区域显示或隐藏加翻页动画)