Android中ListView添加动画
2017-08-09 15:24
337 查看
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为随机。一般不要太乱的还是normal
delay,用于延迟的每个子view的动画开始动画持续时间的浮点数。越大间隔越长。0.3或者30%的字样
另外:LayoutAnimationController包含一个内部类,LayoutAnimationController.AnimationParameters,这个类主要包括了count和index两个参数。这些参数用于计算每个单独的视图动画的开始时间。ViewGroup.LayoutParams这个类大家都一定很熟悉的,主要是height和width。
在XMl使用动画
使用xml文件创建动画 > 在res/anim文件夹先新建一个xml文件,list_anim_layout.xml <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="30%" android:animationOrder="normal" android:animation="@anim/slide_bottom" /> > 同时创建slide_bottom.xml动画文件 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="10%p" android:toYDelta="0" android:duration="300" android:startOffset="100"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" android:startOffset="100"/> </set>
ListView布局中使用设置的动画文件即可
<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<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; }
push_left_in,push_right_in,slide_top_to_bottom,slide_bottom_to_top; 为四个不同的动画。。。。。GridView和ListView一样
相关文章推荐
- 给Android ListView添加删除item动画
- 给Android ListView添加删除item动画
- Android为listview的item添加动画效果
- android fragment 显示ListView,并可以添加动画图片
- Android给ListView添加一个入场动画
- 给Android ListView添加删除item动画
- Android给ListView添加一个入场动画
- Android 向ListView里动态添加内容
- android开发中ListView中添加ImageButton控件时,ListView失去焦点问题
- android ListView添加Headview和Footview后onItemClick的position错误
- ListView添加加载动画
- Android开发-UI控件:为ListView,GirdView,etc...添加系统自带的下拉刷新功能
- android ListView添加事件并获取选中项的值
- Android ListView分页,动态添加数据
- Android 系列 5.13添加简单光栅动画
- android listview每个item定义动画呈现
- Android中给Spinner或ListView添加数据
- Android购物车添加商品动画抛物线ParabolaAnimation
- android ListView内数据的动态添加与删除
- Android - ExpandableListView的group里添加button后不能展开的解决方法