[Android Pro] ListView,GridView之LayoutAnimation特殊动画的实现
转载自:http://gundumw100.iteye.com/blog/1874545
LayoutAnimation干嘛用的?不知道的话网上搜一下。 
Android的Animation之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<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;
}
}
}
[Android Pro] ListView,GridView之LayoutAnimation特殊动画的实现的更多相关文章
- Android之ListView/GridView 优化
		一.效率最低的getView实现 我们知道,ListView和GridView的显示都是通过Adapter的getView实现的. ListView/GridView数据量较小时,我们的处理方式一般是 ... 
- [Android Pro]   listView和GridView的item设置的高度和宽度不起作用
		referece to : http://blog.csdn.net/beibeixiao/article/details/9032569 1. 在Android开发中会发现,有时listVi ... 
- 【转载】 Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
		Android下拉刷新pullToRefreshListViewGridView 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/3 ... 
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
		转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38238749,本文出自:[张鸿洋的博客] 群里一哥们今天聊天偶然提到这个git ... 
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 (转载)
		最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ... 
- Android研究之手PullToRefresh(ListView GridView 下拉刷新)使用具体解释
		 群里一哥们今天聊天偶然提到这个git hub上的控件:pull-to-refresh ,有兴趣的看下,样例中的功能极其强大,支持非常多控件.本篇博客具体给大家介绍下ListView和GridVi ... 
- 【转】Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
		最近项目用到下拉刷新,上来加载更多,这里对PullToRefresh这控件进行了解和使用. 以下内容转载自:http://blog.csdn.net/lmj623565791/article/deta ... 
- Android 快速开发系列 打造万能的ListView GridView 适配器
		转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ... 
- Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!
		大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的.而(Spinner,ListVie ... 
随机推荐
- [How to] UILocalNotification 的使用
			1.简介 IOS共分为本地和远程通知两种通知,本问介绍本地通知UILocalNotification的基本使用方法. 2.本地通知的实现: 步骤一:新建工程 在Xcode中新建一个single vie ... 
- linux磁盘占用跟每个文件夹大小总和不符
			1.一种情况是删除了大文件但是没有释放出来,因为有进程还在调用使用 最简单的方法是reboot下服务器再对比下: 2.查看服务器空间使用情况 df -h cd / du -sh * 
- 手机meta标签(保存下来省的每次都找)
			手机网站Meta标签 手机端特有的Meta标签 1.<meta name="viewport" id="viewport" content="w ... 
- c# 多线程多文件批量下载
			废话少说,先演示一张效果图 简单说下过程喽 开发过程中其实总是会碰到项目想应用下载文件~ 看其他语言有很多封装好的类库可以使用~~ 作为小白的我并没有找到很多c#的案例可参考 后找到一款“MutThr ... 
- AtomicReference 和 volatile 的区别
			顾名思义,就是不会被打断!!!!!! https://www.cnblogs.com/lpthread/p/3909231.html java.util.concurrent.atomic工具包,支持 ... 
- BestCoder Round #85 前三题题解
			sum Accepts: 822 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ... 
- python webpy 框架环境架设
			前几年使用过 webpy做个些小东西,今天有个东西从拾webpy.但是基本上都忘记了,还是那句古话“好记性不如烂笔头”.这里把相应的步骤梳理下. 前提: 操作系统 windows 一.webpy 方面 ... 
- 对TDD原则的理解
			1,在编写好失败的单元测试之前,不要编写任何产品代码 如果不先写测试,那么各个函数就会耦合在一起,最后变得无法测试 如果后写测试,你也许能对大块大块的代码进行测试,但是无法对每个函数进行测 ... 
- Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
			J. Rising Sun time limit per test 1.0 s memory limit per test 1024 MB input standard input output st ... 
- javascript 的回调函数
			既然函数可以像其他数据那样赋值给某个个变量,可以被定义.删除.拷贝,那为什么就不能被当成参数传递给其他函数呢? 下面的示例中,我们定义了一个以两个函数为参数的函数.该函数会分别执行这两个参数函数,并返 ... 
