仿火车出票效果

之前我下载了BaseAnimation 开源库(BaseAnimation是基于开源的APP,致力于收集各种动画效果) 

BaseAnimation 转载的链接:http://blog.csdn.net/vipzjyno1/article/details/20622621

发现里面有个火车票的出票效果,发现可以优化下:

BaseAnimation内的仿出票效果

可是它的出的票的布局高度啥都是写死的,通过这个思路,我便想到要做个类似于数据是通过网络获取,高度不一定的listview的订单出票效果。

一.  思路:

1)叠在布局上层的是订单信息,而在下层的就是订单内菜单的详细条目,详细条目的布局是置于布局最底层,并且在订单信息相对位置下方,这里使用了FrameLayout来处 理 详细条目布局。

2)出票的详细条目列表采用了LISTVIEW,它的动画初始位置要通过计算LISTVIEW的总高度进行计算获取,之后通过TranslateAnimation 进行Animation动画。

3)采用线程来模拟网络获取延迟的效果。

二.  碰到解决的问题:

1)碰到一个问题,就是如果数据一多,超过了一屏幕,在动画过程中动画衔接效果就很差,并有可能出现断层效果。

解决:通过重写ListView, 计算高度,并且在ListView 外面嵌套了一层ScrollView,这样便可以解决这样的问题。

2) 如果在订单信息布局下方直接放置一个LISTVIEW的话,这样,动画时候,LISTVIEW就会盖在订单信息上方。

解决:LISTVIEW外层一定要嵌套一层布局,并且设定在订单信息下方,这样便不会产生上述问题。

3)由于订单底部

一开始就是出现的,并且在数据刷新后跟随LISTVIEW一起下滑。

解决:采用Listview的addFooterView(底部view)方法,把它添加到LISTVIEW底部,在开始添加完毕后就直接初始化让Listview.setAdapter(null);

这样便在开始底部就显示出来了。

4)如何去计算LISTVIEW的总高度

解决:本DEMO采用了2种方式,

第一种:鉴于订单中每个ITEM的布局都是固定的,于是在布局中设置ITEM的高度为固定值,之后乘以listAdapter.getCount() 加上分割线listView.getDividerHeight() 的总高度

第二种:如果每个ITEM的布局是高度是不一定的话,就会造成影响,便找了一些资料,使用了以下方法:

/** ListView 总高度 */ 
public static int totalHeight = 0;  
 
public static void setListViewHeightBasedOnChildren(ListView listView) {  
    ListAdapter listAdapter = listView.getAdapter();  
 if (listAdapter == null) {  
 return;  
    }  
    totalHeight = 0;  
 // 由于ADD了个footer,所以总量减去1 
    Log.d("listAdapter.getCount()", "" + listAdapter.getCount());  
 for (int i = 0, len = listAdapter.getCount() - 1; i < len; i++) {  
        View listItem = listAdapter.getView(i, null, listView);  
        listItem.measure(0, 0);  
        totalHeight += listItem.getMeasuredHeight();  
        Log.d("getMeasuredHeight", "" + listItem.getMeasuredHeight());  
    }  
    totalHeight = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
}  

计算得到了总高度。

5)实现动画效果

解决:

 /** 
* 启动打印订单动画 
*/ 
rivate void startAnimation() {  
anim = new TranslateAnimation(0.0f, 0.0f, -totalHeight, 0);  
anim.setDuration(1000);  
anim.setFillAfter(true);  
anim.setAnimationListener(new AnimationListener() {  
 @Override 
 public void onAnimationStart(Animation animation) {  
 // TODO Auto-generated method stub 
    }  
 
 @Override 
 public void onAnimationRepeat(Animation animation) {  
 // TODO Auto-generated method stub 
    }  
 
 @Override 
 public void onAnimationEnd(Animation animation) {  
 // TODO Auto-generated method stub 
        cListview.clearAnimation();  
    }  
});  
cListview.startAnimation(anim);  

最后来看看动画效果把:

由于是第一次写博客,有不足之处望各位大神提出意见和建议,共同进步。谢谢!

转载请附上:http://blog.csdn.net/vipzjyno1/article/details/20623401

DEMO源码下载链接:

http://download.csdn.net/detail/vipzjyno1/7000355

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货园

Android 三星手机拍照,从图库选择照片旋转问题完美解决

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48...

5281
来自专栏Android机动车

MaterialDesign之FloatingActionButton

就是上面这样了,忘说了一件很重要的事情……FloatingActionButton的监听就是最原始的监听!!!接下来到了重头戏了

993
来自专栏刘望舒

Android绘制优化(二)布局优化

前言 我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升。当然这只是布局优化的一方面,那么如何来进行布...

2718
来自专栏非著名程序员

Android开发:最详细的 Toolbar 开发实践总结

? 最详细的 Toolbar 开发实践总结 过年前发了一篇介绍 Translucent System Bar 特性的文章 Translucent Syste...

2419
来自专栏Android 开发者

用 CoordinatorLayout 处理滚动

1.3K8
来自专栏葬爱家族

Android高德之旅(7)绘制点标记

本系列第7篇,终于讲到了绘制。说到吃饭...呸,说到绘制,这在地图应用中是非常重要的一部分,很多时候我们集成地图SDK时,都不可能仅仅使用默认地图元素,在默认元...

1913
来自专栏AndroidTv

Activity 切换动画---点击哪里从哪放大

emmmm,这次来梳理一下 Activity 切换动画的研究。首先,老规矩,看一下效果图:

6685
来自专栏非著名程序员

理清 Activity、View 及 Window 之间关系

View、Window以及Activity主要是用于显示并与用户交互的。这让我们在初学的时候很容易弄混,而且无法理解他们区别以及联系。本文是笔者查阅相关资料后,...

2449
来自专栏jianhuicode

仿腾讯课堂固定滚动列表ReactNative组件

前言 由于业务需要做成类似腾讯课堂课程详情滚动的效果,考虑到后面有可能有新的呈现方式,RN提供的组件没有这种滚动控件,不如自己封装,其实去年已经写了一篇但是写的...

8207
来自专栏吴老师移动开发

【iOS开发】UITableView优化

移动开发中,任何一个应用都或多或少的有列表的存在,列表的上下滑动直接关系到用户体验。如果处理不好,就会使得列表滑动起来有明显的卡顿效果。所以对列表的优化,让它更...

1251

扫码关注云+社区

领取腾讯云代金券