博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android Pro] ListView,GridView之LayoutAnimation特殊动画的实现
阅读量:6485 次
发布时间:2019-06-23

本文共 7563 字,大约阅读时间需要 25 分钟。

转载自:

LayoutAnimation干嘛用的?不知道的话网上搜一下。

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

/**          * 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
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

push_right_in.xml

第2种效果:第一个item从下往上滑入,其他Item从上往下滑入效果,这个效果如果单个Item比较高(height)的话效果非常酷(卡牛的老版本好像用的就是这种效果)。

slide_bottom_to_top.xml

slide_top_to_bottom.xml

另外一篇:

这个不是我写的。
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;  } }}

 

你可能感兴趣的文章
与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能...
查看>>
Jenkins学习七:Jenkins的授权和访问控制
查看>>
PowerDesigner将PDM导出生成WORD文档(转)
查看>>
路由器扫描的Java源码
查看>>
Android经常使用的五种弹出对话框
查看>>
经常使用命令 echo、@、call、pause、rem
查看>>
Activity的启动模式详解
查看>>
[改善Java代码]构造函数尽量简化
查看>>
优化PHP程序的方法(温故知新)
查看>>
阿里开源Mysql分布式中间件:Cobar
查看>>
JavaScript对数组的处理(一)
查看>>
[iBoard 电子学堂][第八卷 设计任意波发生器]第一篇 iBoard 任意波发生器简介
查看>>
[iBoard 电子学堂][第〇卷 电子基础]第二篇 电路图与印刷电路板
查看>>
配置JAVA环境
查看>>
java环境变量
查看>>
浅谈API设计
查看>>
java----OO的概念和设计原则(转)
查看>>
Java 实现 淘宝秒杀 聚划算 自己主动提醒 源代码
查看>>
如何下载一个物种的全部EST序列 | NCBI | 表达序列标签
查看>>
代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载
查看>>