Android的Animation之LayoutAnimation使用方法

来源:互联网 发布:max内功版数据库转换 编辑:程序博客网 时间:2024/05/09 05:23


有两种用法,我的通常写在代码中,像下面这样: 
Java代码  收藏代码
  1. /** 
  2.      * Layout动画 
  3.      *  
  4.      * @return 
  5.      */  
  6.     protected LayoutAnimationController getAnimationController() {  
  7.         int duration=300;  
  8.         AnimationSet set = new AnimationSet(true);  
  9.   
  10.         Animation animation = new AlphaAnimation(0.0f, 1.0f);  
  11.         animation.setDuration(duration);  
  12.         set.addAnimation(animation);  
  13.   
  14.         animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,  
  15.                 Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,  
  16.                 -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);  
  17.         animation.setDuration(duration);  
  18.         set.addAnimation(animation);  
  19.   
  20.         LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f);  
  21.         controller.setOrder(LayoutAnimationController.ORDER_NORMAL);  
  22.         return controller;  
  23.     }  


应用的时候只需这样: 
Java代码  收藏代码
  1. listView = (ListView) findViewById(R.id.listView);  
  2. listView.setLayoutAnimation(getAnimationController());  
  3. adapter = new ListViewAdapter(stores);  
  4. listView.setAdapter(adapter);  


这样一个简单的LayoutAnimation就完成了。 

别看到这里就以为文章就完了,以上都是些小玩意。呵呵,还有更厉害的! 

你想设置更炫的动画吗?LayoutAnimation通常是Item一个一个的出现,有某种规律的。想让每个Item都有自己的动画吗?那就继续看下去。 
Java代码  收藏代码
  1. .......  
  2. private int duration=1000;  
  3.         private Animation push_left_in,push_right_in;  
  4.         private Animation slide_top_to_bottom,slide_bottom_to_top;  
  5.         public ListViewAdapter(ArrayList<Store> list) {  
  6.             this.list = list;  
  7.             push_left_in=AnimationUtils.loadAnimation(context, R.anim.push_left_in);  
  8.             push_right_in=AnimationUtils.loadAnimation(context, R.anim.push_right_in);  
  9.             slide_top_to_bottom=AnimationUtils.loadAnimation(context, R.anim.slide_top_to_bottom);  
  10.             slide_bottom_to_top=AnimationUtils.loadAnimation(context, R.anim.slide_bottom_to_top);  
  11.         }  
  12. ........  
  13.   
  14. @Override  
  15.         public View getView(int position, View convertView, ViewGroup parent) {  
  16.             // TODO Auto-generated method stub  
  17.             ViewHodler hodler;  
  18.             if (convertView == null) {  
  19.                 hodler = new ViewHodler();  
  20.                 convertView = LayoutInflater.from(context).inflate(  
  21.                         R.layout.simple_item_7_for_main, null);  
  22.                 ........  
  23.                   
  24.                   
  25.                 convertView.setTag(hodler);  
  26.                   
  27.                 if (position % 2 == 0) {  
  28.                     push_left_in.setDuration(duration);  
  29.                     convertView.setAnimation(push_left_in);  
  30.                 } else {  
  31.                     push_right_in.setDuration(duration);  
  32.                     convertView.setAnimation(push_right_in);  
  33.                 }  
  34.                   
  35.                 /*if(position==0){ 
  36.                     slide_bottom_to_top.setDuration(duration); 
  37.                     convertView.setAnimation(slide_bottom_to_top); 
  38.                 } 
  39.                 else{ 
  40.                     slide_top_to_bottom.setDuration(duration); 
  41.                     convertView.setAnimation(slide_top_to_bottom); 
  42.                 }*/  
  43.                   
  44.             }else{  
  45.                 hodler = (ViewHodler) convertView.getTag();  
  46.             }  
  47. ........  
  48.               
  49.               
  50.             return convertView;  
  51.         }  

看见上面的动画设置了吗?将动画写在getView()中,这样可以设置很多不同的动画。其实这不属于LayoutAnimation的范畴了。 
你可以试一下,如果设计好的话,可以有比LayoutAnimation更酷的效果。 
我这里只试了两种效果。 
下面是我的动画文件,共四个: 
第一种效果:item分别从左右两侧滑入效果。 
push_left_in.xml 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="300"/>  
  4.     <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />  
  5. </set>  

push_right_in.xml 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>  
  4.     <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />  
  5. </set>  


第2种效果:第一个item从下往上滑入,其他Item从上往下滑入效果,这个效果如果单个Item比较高(height)的话效果非常酷(卡牛的老版本好像用的就是这种效果)。 
slide_bottom_to_top.xml 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">  
  3.     <translate android:fromYDelta="100%" android:toXDelta="0" android:duration="300" />  
  4.     <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />  
  5. </set>  

slide_top_to_bottom.xml 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">  
  3.     <translate android:fromYDelta="-100%" android:toXDelta="0" android:duration="300" />  
  4.     <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />  
  5. </set>  


另外一篇: 
这个不是我写的。 
GridView的item从上下左右飞入 
Java代码  收藏代码
  1. import java.util.Random;  
  2. import android.app.Activity;  
  3. import android.content.Context;  
  4. import android.os.Bundle;  
  5. import android.view.LayoutInflater;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.view.ViewGroup;  
  9. import android.view.animation.Animation;  
  10. import android.view.animation.TranslateAnimation;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.Button;  
  13. import android.widget.GridView;  
  14. import android.widget.ImageView;  
  15. public class ZdemoActivity extends Activity {  
  16.    
  17.  private GridView gv;  
  18.  private Button btn;  
  19.  private TranslateAnimation taLeft, taRight, taTop, taBlow;  
  20.  private int[] imgList = new int[15];  
  21.  private MyAdapter mAdapter;  
  22.  private LayoutInflater mInflater;  
  23.  @Override  
  24.  public void onCreate(Bundle savedInstanceState) {  
  25.   super.onCreate(savedInstanceState);  
  26.   setContentView(R.layout.main);  
  27.   this.InitView();  
  28.   this.InitAnima();  
  29.   this.InitData();  
  30.  }  
  31.  private void InitAnima() {  
  32.   // TODO Auto-generated method stub  
  33.   taLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f,  
  34.     Animation.RELATIVE_TO_PARENT, 0.0f,  
  35.     Animation.RELATIVE_TO_PARENT, 0.0f,  
  36.     Animation.RELATIVE_TO_PARENT, 0.0f);  
  37.   taRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f,  
  38.     Animation.RELATIVE_TO_PARENT, 0.0f,  
  39.     Animation.RELATIVE_TO_PARENT, 0.0f,  
  40.     Animation.RELATIVE_TO_PARENT, 0.0f);  
  41.   taTop = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,  
  42.     Animation.RELATIVE_TO_PARENT, 0.0f,  
  43.     Animation.RELATIVE_TO_PARENT, 1.0f,  
  44.     Animation.RELATIVE_TO_PARENT, 0.0f);  
  45.   taBlow = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,  
  46.     Animation.RELATIVE_TO_PARENT, 0.0f,  
  47.     Animation.RELATIVE_TO_PARENT, -1.0f,  
  48.     Animation.RELATIVE_TO_PARENT, 0.0f);  
  49.   taLeft.setDuration(1000);  
  50.   taRight.setDuration(1000);  
  51.   taTop.setDuration(1000);  
  52.   taBlow.setDuration(1000);  
  53.  }  
  54.  private void InitData() {  
  55.   // TODO Auto-generated method stub  
  56.   for (int i = 0; i < 15; i++) {  
  57.    imgList[i] = R.drawable.ic_launcher;  
  58.   }  
  59.   mAdapter = new MyAdapter();  
  60.   gv.setAdapter(mAdapter);  
  61.  }  
  62.  private void InitView() {  
  63.   // TODO Auto-generated method stub  
  64.   gv = (GridView) findViewById(R.id.gridView1);  
  65.   btn = (Button) findViewById(R.id.button1);  
  66.   btn.setOnClickListener(new OnClickListener() {  
  67.    @Override  
  68.    public void onClick(View v) {  
  69.     // TODO Auto-generated method stub  
  70.     mAdapter = null;  
  71.     mAdapter = new MyAdapter();  
  72.     gv.setAdapter(mAdapter);  
  73.     mAdapter.notifyDataSetChanged();  
  74.    }  
  75.   });  
  76.   mInflater = (LayoutInflater) this  
  77.     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  78.  }  
  79.  private class MyAdapter extends BaseAdapter {  
  80.   @Override  
  81.   public int getCount() {  
  82.    // TODO Auto-generated method stub  
  83.    return imgList.length;  
  84.   }  
  85.   @Override  
  86.   public Object getItem(int position) {  
  87.    // TODO Auto-generated method stub  
  88.    return imgList[position];  
  89.   }  
  90.   @Override  
  91.   public long getItemId(int position) {  
  92.    // TODO Auto-generated method stub  
  93.    return position;  
  94.   }  
  95.   @Override  
  96.   public View getView(int position, View convertView, ViewGroup parent) {  
  97.    // TODO Auto-generated method stub  
  98.    ViewHolder holder = null;  
  99.    if (convertView == null) {  
  100.     convertView = mInflater.inflate(R.layout.item, null);  
  101.     holder = new ViewHolder();  
  102.     holder.image = (ImageView) convertView  
  103.       .findViewById(R.id.imageView1);  
  104.     convertView.setTag(holder);  
  105.    } else {  
  106.     holder = (ViewHolder) convertView.getTag();  
  107.    }  
  108.    int imgID = imgList[position];  
  109.    holder.image.setImageResource(imgID);  
  110.    Random ran = new Random();  
  111.    int rand = ran.nextInt(4);  
  112.    switch (rand) {  
  113.    case 0:  
  114.     convertView.startAnimation(taLeft);  
  115.     break;  
  116.    case 1:  
  117.     convertView.startAnimation(taRight);  
  118.     break;  
  119.    case 2:  
  120.     convertView.startAnimation(taTop);  
  121.     break;  
  122.    case 3:  
  123.     convertView.startAnimation(taBlow);  
  124.     break;  
  125.    }  
  126.    return convertView;  
  127.   }  
  128.   class ViewHolder {  
  129.    public ImageView image;  
  130.   }  
  131.  }  
  132. }  
0 0