之前我下载了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的布局是高度是不一定的话,就会造成影响,便找了一些资料,使用了以下方法:

  1. /** ListView 总高度 */
  2. public static int totalHeight = 0;
  3. public static void setListViewHeightBasedOnChildren(ListView listView) {
  4. ListAdapter listAdapter = listView.getAdapter();
  5. if (listAdapter == null) {
  6. return;
  7. }
  8. totalHeight = 0;
  9. // 由于ADD了个footer,所以总量减去1
  10. Log.d("listAdapter.getCount()", "" + listAdapter.getCount());
  11. for (int i = 0, len = listAdapter.getCount() - 1; i < len; i++) {
  12. View listItem = listAdapter.getView(i, null, listView);
  13. listItem.measure(0, 0);
  14. totalHeight += listItem.getMeasuredHeight();
  15. Log.d("getMeasuredHeight", "" + listItem.getMeasuredHeight());
  16. }
  17. totalHeight = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
  18. }
	/** 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)实现动画效果

解决:

  1. /**
  2. * 启动打印订单动画
  3. */
  4. rivate void startAnimation() {
  5. anim = new TranslateAnimation(0.0f, 0.0f, -totalHeight, 0);
  6. anim.setDuration(1000);
  7. anim.setFillAfter(true);
  8. anim.setAnimationListener(new AnimationListener() {
  9. @Override
  10. public void onAnimationStart(Animation animation) {
  11. // TODO Auto-generated method stub
  12. }
  13. @Override
  14. public void onAnimationRepeat(Animation animation) {
  15. // TODO Auto-generated method stub
  16. }
  17. @Override
  18. public void onAnimationEnd(Animation animation) {
  19. // TODO Auto-generated method stub
  20. cListview.clearAnimation();
  21. }
  22. });
  23. cListview.startAnimation(anim);
        /**
* 启动打印订单动画
*/
private 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

(转)Android 仿订单出票效果 (附DEMO)的更多相关文章

  1. Android仿IOS回弹效果 ScrollView回弹 总结

    Android仿IOS回弹效果  ScrollView回弹 总结 应项目中的需求  须要仿IOS 下拉回弹的效果 , 我在网上搜了非常多 大多数都是拿scrollview 改吧改吧 试了一些  发现总 ...

  2. Android:JNA实践(附Demo)

    一.JNA和JNI的对比   1.JNI的调用流程 Android应用开发中要实现Java和C,C++层交互时,想必首先想到的是JNI,但是JNI的使用过程十分繁琐,需要自己再封装一层JNI接口进行转 ...

  3. 允许Android随着屏幕转动的控制自由转移到任何地方(附demo)

    在本文中,Android ViewGroup/View流程,及经常使用的自己定义ViewGroup的方法.在此基础上介绍动态控制View的位置的三种方法,并给出最佳的一种方法. 一.ViewGroup ...

  4. Android 浮动窗口进阶——画中画,浮动视频(附Demo)

    今天继续上一篇Android顶层窗口.浮动窗口的进阶应用.上一篇主要讲解了WindowManager服务和如何使用WindowManager编写一个顶层窗口.今天主要是讲讲如何在顶层窗口里面播放视频, ...

  5. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

  6. Android仿WIN8系统磁贴点击下沉倾斜效果

    ※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...

  7. Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发"鼻涕"下拉粘连效果

    前言 接着上一期Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件 的博客开始,同样,在开始前我们先来看一下目标效果: 下面上一下本章需要实现的效果图: 大家看到这个效果 ...

  8. android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码

    Android精选源码 android漂亮的加载效果 android各种 选择器 汇总源码 Android仿bilibili搜索框效果 Android记事本app.分类,涂鸦.添加图片或者其他附件 仿 ...

  9. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

随机推荐

  1. java.io.FileNotFoundException: /opt/apache-tomcat-7.0.57/conf/server.xml (权限不够)

    1 错误描述 youhaidong@youhaidong:~$ cd /opt/apache-tomcat-7.0.57 youhaidong@youhaidong:/opt/apache-tomca ...

  2. 电脑中安装多个jdk,eclipse的选择!

    以前自己写java程序的时候,没有用到什么高级的东西,所以没咋关注eclipse中jdk的版本问题: 但是随着学习的深入,难免会用到别人的项目,那么在导入别人的项目过程中就会发现时长有问题,而很多情况 ...

  3. Supermarket POJ - 1456

    A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold ...

  4. 三天来都在写项目;今天开始学习了js

    JavaScript 一种脚本语言,他描述了网页的行为:他是和java一种完全不同的语言 JavaScript的输出写法有四种: JavaScript的语言的变量必须以字母.美元符号$ 或者下划线_来 ...

  5. docker进阶-初探Docker-compose

    什么是Docker-compose   compose 翻译成中文的意思是"构成"和"组成"的意思.Docker我之前把他比作一个大轮船,这个轮船上面可以放很多 ...

  6. 【CJOJ P2110】YL杯超级篮球赛

    [CJOJ P2110]YL杯超级篮球赛 Description 一年一度的高一YL杯超级篮球赛开赛了.当然,所谓超级的意思是参赛人数可能多于5人.小三对这场篮球赛非常感兴趣,所以一场都没有落下.每天 ...

  7. 【洛谷1032 】【CJOJ1711】【NOIP2002】字串变换

    ###题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换 ...

  8. java设计模式-----14、桥接模式

    Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction ...

  9. 【解高次同余方程】51nod1038 X^A Mod P

    1038 X^A Mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 X^A mod P = B,其中P为质数.给出P和A B,求< P的所有X. 例如:P = 11 ...

  10. http进阶

    前言: 上一篇博文已经说到了,apache2.4简单的配置,端口,持久连接,MPM,DSO,路径下基于来源控制,页面特性,日志设置 安全域,虚拟主机等等. 一:URL URL是互联中获取标记资源的方式 ...