• listview添加item动画



    有两种用法,我的通常写在代码中,像下面这样: 

    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. }  
  • 相关阅读:
    bug篇——generator逆向出现配置文件不存在
    安装篇——Linux下安装mysql
    安装篇——linux服务器安装jdk、mysql、nginx、fastdfs
    基础篇——浅谈Base64
    基础篇—AOP
    基础篇—List、Set、Map
    工具类篇——I/O读取文件
    基础篇——Spring之XML配置Bean的属性注入
    简单了解malloc分配内存
    通过指针形参修改实参的值2
  • 原文地址:https://www.cnblogs.com/visuals/p/5091838.html
Copyright © 2020-2023  润新知