有两种用法,我的通常写在代码中,像下面这样:
- /**
- * Layout动画
- *
- * @return
- */
- protected LayoutAnimationController getAnimationController() {
- int duration=300;
- AnimationSet set = new AnimationSet(true);
- Animation animation = new AlphaAnimation(0.0f, 1.0f);
- animation.setDuration(duration);
- set.addAnimation(animation);
- animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
- Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
- -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
- animation.setDuration(duration);
- set.addAnimation(animation);
- LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f);
- controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
- return controller;
- }
应用的时候只需这样:
- listView = (ListView) findViewById(R.id.listView);
- listView.setLayoutAnimation(getAnimationController());
- adapter = new ListViewAdapter(stores);
- listView.setAdapter(adapter);
这样一个简单的LayoutAnimation就完成了。
别看到这里就以为文章就完了,以上都是些小玩意。呵呵,还有更厉害的!
你想设置更炫的动画吗?LayoutAnimation通常是Item一个一个的出现,有某种规律的。想让每个Item都有自己的动画吗?那就继续看下去。
- .......
- private int duration=1000;
- private Animation push_left_in,push_right_in;
- private Animation slide_top_to_bottom,slide_bottom_to_top;
- public ListViewAdapter(ArrayList<Store> list) {
- this.list = list;
- push_left_in=AnimationUtils.loadAnimation(context, R.anim.push_left_in);
- push_right_in=AnimationUtils.loadAnimation(context, R.anim.push_right_in);
- slide_top_to_bottom=AnimationUtils.loadAnimation(context, R.anim.slide_top_to_bottom);
- slide_bottom_to_top=AnimationUtils.loadAnimation(context, R.anim.slide_bottom_to_top);
- }
- ........
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- ViewHodler hodler;
- if (convertView == null) {
- hodler = new ViewHodler();
- convertView = LayoutInflater.from(context).inflate(
- R.layout.simple_item_7_for_main, null);
- ........
- convertView.setTag(hodler);
- if (position % 2 == 0) {
- push_left_in.setDuration(duration);
- convertView.setAnimation(push_left_in);
- } else {
- push_right_in.setDuration(duration);
- convertView.setAnimation(push_right_in);
- }
- /*if(position==0){
- slide_bottom_to_top.setDuration(duration);
- convertView.setAnimation(slide_bottom_to_top);
- }
- else{
- slide_top_to_bottom.setDuration(duration);
- convertView.setAnimation(slide_top_to_bottom);
- }*/
- }else{
- hodler = (ViewHodler) convertView.getTag();
- }
- ........
- return convertView;
- }
看见上面的动画设置了吗?将动画写在getView()中,这样可以设置很多不同的动画。其实这不属于LayoutAnimation的范畴了。
你可以试一下,如果设计好的话,可以有比LayoutAnimation更酷的效果。
我这里只试了两种效果。
下面是我的动画文件,共四个:
第一种效果:item分别从左右两侧滑入效果。
push_left_in.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="300"/>
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
- </set>
push_right_in.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
- </set>
第2种效果:第一个item从下往上滑入,其他Item从上往下滑入效果,这个效果如果单个Item比较高(height)的话效果非常酷(卡牛的老版本好像用的就是这种效果)。
slide_bottom_to_top.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
- <translate android:fromYDelta="100%" android:toXDelta="0" android:duration="300" />
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
- </set>
slide_top_to_bottom.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
- <translate android:fromYDelta="-100%" android:toXDelta="0" android:duration="300" />
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
- </set>
另外一篇:
这个不是我写的。
GridView的item从上下左右飞入
- import java.util.Random;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.view.animation.Animation;
- import android.view.animation.TranslateAnimation;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.GridView;
- import android.widget.ImageView;
- public class ZdemoActivity extends Activity {
- private GridView gv;
- private Button btn;
- private TranslateAnimation taLeft, taRight, taTop, taBlow;
- private int[] imgList = new int[15];
- private MyAdapter mAdapter;
- private LayoutInflater mInflater;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- this.InitView();
- this.InitAnima();
- this.InitData();
- }
- private void InitAnima() {
- // TODO Auto-generated method stub
- taLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f);
- taRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f);
- taTop = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 1.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f);
- taBlow = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f,
- Animation.RELATIVE_TO_PARENT, -1.0f,
- Animation.RELATIVE_TO_PARENT, 0.0f);
- taLeft.setDuration(1000);
- taRight.setDuration(1000);
- taTop.setDuration(1000);
- taBlow.setDuration(1000);
- }
- private void InitData() {
- // TODO Auto-generated method stub
- for (int i = 0; i < 15; i++) {
- imgList[i] = R.drawable.ic_launcher;
- }
- mAdapter = new MyAdapter();
- gv.setAdapter(mAdapter);
- }
- private void InitView() {
- // TODO Auto-generated method stub
- gv = (GridView) findViewById(R.id.gridView1);
- btn = (Button) findViewById(R.id.button1);
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- mAdapter = null;
- mAdapter = new MyAdapter();
- gv.setAdapter(mAdapter);
- mAdapter.notifyDataSetChanged();
- }
- });
- mInflater = (LayoutInflater) this
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
- private class MyAdapter extends BaseAdapter {
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return imgList.length;
- }
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return imgList[position];
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- ViewHolder holder = null;
- if (convertView == null) {
- convertView = mInflater.inflate(R.layout.item, null);
- holder = new ViewHolder();
- holder.image = (ImageView) convertView
- .findViewById(R.id.imageView1);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- int imgID = imgList[position];
- holder.image.setImageResource(imgID);
- Random ran = new Random();
- int rand = ran.nextInt(4);
- switch (rand) {
- case 0:
- convertView.startAnimation(taLeft);
- break;
- case 1:
- convertView.startAnimation(taRight);
- break;
- case 2:
- convertView.startAnimation(taTop);
- break;
- case 3:
- convertView.startAnimation(taBlow);
- break;
- }
- return convertView;
- }
- class ViewHolder {
- public ImageView image;
- }
- }
- }