Android中ListView添加动画

发布时间:2021-12-09 00:18:12

Android开发中最常用的ListView以及GridView可以实现多种的动画,为我们的应用增加视觉的体验。比如携程机票搜索的列表页、卡牛等。今天咱们就看看如何实现炫酷的列表动画效果。

首先如果只是对列表中的没一个item使用同一个动画效果,我们可以使用LayoutAnimation,顾名思义,是用来设置给viewgroup类型的animation,是子view来执行的。可以两种实现方式


第一种方式:
XML文件中使用::android:layoutAnimation="@anim/popinlayout"
第二种方式:
java代码中动态设置::viewGrop.setLayoutAnimation(LayoutAnimationController);

和Animation类似,Layout Animation也支持AnimationListener,在动画开始或者结束做一些处理,具体的就不多说了。layoutanimation会在View Group第一次进行布局的时候执行一次。
具体来说,layoutAnimation支持三个参数,


anim就是要执行的动画比如*移、旋转、透明度以及缩放animationOrder,这个是说子view按照什么顺序来执行anim,可以使normal(正常,0-n),reverse(反序,n-0),random为随机。一般不要太乱的还是normaldelay,用于延迟的每个子view的动画开始动画持续时间的浮点数。越大间隔越长。0.3或者30%的字样

另外:LayoutAnimationController包含一个内部类,LayoutAnimationController.AnimationParameters,这个类主要包括了count和index两个参数。这些参数用于计算每个单独的视图动画的开始时间。ViewGroup.LayoutParams这个类大家都一定很熟悉的,主要是height和width。


在XMl使用动画

使用xml文件创建动画


> 在res/anim文件夹先新建一个xml文件,list_anim_layout.xml


android:delay="30%"
android:animationOrder="normal"
android:animation="@anim/slide_bottom" />



> 同时创建slide_bottom.xml动画文件



android:fromYDelta="10%p"
android:toYDelta="0"
android:duration="300"
android:startOffset="100"/>
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="300"
android:startOffset="100"/>



ListView布局中使用设置的动画文件即可



android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:persistentDrawingCache="animation|scrolling"
android:layoutAnimation="@anim/list_anim_layout"
/>


-

第二种设置方法:java代码中动态设置

//通过加载XML动画设置文件来创建一个Animation对象;
Animation animation=AnimationUtils.loadAnimation(this, R.anim.slide_bottom);
//得到一个LayoutAnimationController对象;
LayoutAnimationController lac=new LayoutAnimationController(animation);
//设置控件显示的顺序;
lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
//设置控件显示间隔时间;
lac.setDelay(1);
//为ListView设置LayoutAnimationController属性;
datalist.setLayoutAnimation(lac);


有时候我们可以在代码中一般为工具类中,创建一个加载动画的方法 比如:



/**
* Layout动画
*
* @return
*/
public static 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(AnimUtil.getAnimationController());
adapter = new ListViewAdapter(stores);
listView.setAdapter(adapter);

~~到这里你已经可以为你的ListView或者GridView设置比较炫的动画了,,,不过还可以设置更加炫酷的不一样的动画!!!
为每个Item设置不同效果的动画,通过Adapter中的getView方法为特定的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;
}

push_left_in,push_right_in,slide_top_to_bottom,slide_bottom_to_top; 为四个不同的动画。。。。。GridView和ListView一样

相关文档

  • 关于计算机科学引论课程
  • 中国儿童励志故事大全集
  • 吃什么可以去皱美白紧肤
  • 事业单位会计实习报告2020年
  • 适合暗恋的人听的经典歌曲推荐
  • 物业保洁服务保证书
  • 荒地种植什么好
  • 用药妆小心这几个误区
  • 阴道炎手术费用要多少 阴道炎治疗大概需要多少钱
  • 咸鱼烹饪方法
  • 如何更改Linux(Ubuntu)语言和编码设置
  • 手机qq怎么把人拉入群
  • 急疹与麻疹的区别
  • 牛排店的黑胡椒酱怎么怎么制作??
  • 2016最新普通话水平考试技巧
  • 业务学习计划范文
  • 四年级歇后语大全及答案
  • 探探如何跳过设备认证
  • 八年级物理下册现象学习口诀知识点
  • 条件阻塞java__java5条件阻塞Condition的应用
  • Amazon MusicTool上报事件
  • 大厂Java研发岗位要求你清楚吗?
  • 市交通运输局综合行政执法局春运工作总结
  • IntelliJ IDEA 中SpringBoot对Run/Debug Configurations配置 SpringBoot热部署
  • 2017年关于春节的作文:家乡的春节
  • 关于垃圾环保的作文
  • 商务英语中委婉表达的翻译原则
  • 编程常见错误总结
  • 酒店火灾原因及调查报告
  • 软件测试学习路径汇总
  • 猜你喜欢

    电脑版