首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddreams/article/details/43194799)。
我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation)。帧动画是提供了一种逐帧播放图片的动画方式,播放事先做好的图像,与gif图片原理类似,就像是在放电影一样。补间动画可以实现View组件的移动、放大、缩小以及渐变等效果。
今天我们主要来模仿一下美团中加载数据时小人奔跑动画的对话框效果,取个有趣的名字就是Running Man,奔跑吧,兄弟!话不多少,先上效果图,让各位大侠看看是不是你想要实现的效果,然后再决定是否往下阅读,因为做为程序员我们的时间都很宝贵,毕竟还没有女朋友呢?
(ps:因为技术原因,提供的动态图效果不是很明显,但在手机上运行是非常好的,有兴趣的朋友可以下载源码看看。)
下面讲讲实现的原理,首先我们在项目的res目录下新建一下anim文件夹,然后新建一个xml文件,添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false" ><itemandroid:drawable="@drawable/app_loading0"android:duration="150"/><itemandroid:drawable="@drawable/app_loading1"android:duration="150"/></animation-list>
animation-list 是动画列表,中间放很多的item 也就是组成帧动画的图片,
android:drawable[drawable]//加载Drawable对象
android:duration[long]//每一帧动画的持续时间(单位ms)
     android:oneshot[boolean]//动画是否只运行一次,true运行一次,false重复运行
写好之后我们来看自定义一个对话框,来实现打开对话框时,自动加载奔跑的动画。见代码:
/*** @Description:自定义对话框* @author http://blog.csdn.net/finddreams*/
public class CustomProgressDialog extends ProgressDialog {private AnimationDrawable mAnimation;private Context mContext;private ImageView mImageView;private String mLoadingTip;private TextView mLoadingTv;private int count = 0;private String oldLoadingTip;private int mResid;public CustomProgressDialog(Context context, String content, int id) {super(context);this.mContext = context;this.mLoadingTip = content;this.mResid = id;setCanceledOnTouchOutside(true);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();initData();}private void initData() {mImageView.setBackgroundResource(mResid);// 通过ImageView对象拿到背景显示的AnimationDrawablemAnimation = (AnimationDrawable) mImageView.getBackground();// 为了防止在onCreate方法中只显示第一帧的解决方案之一mImageView.post(new Runnable() {@Overridepublic void run() {mAnimation.start();}});mLoadingTv.setText(mLoadingTip);}public void setContent(String str) {mLoadingTv.setText(str);}private void initView() {setContentView(R.layout.progress_dialog);mLoadingTv = (TextView) findViewById(R.id.loadingTv);mImageView = (ImageView) findViewById(R.id.loadingIv);}}

可以看到在代码中,我们使用到一个imageview.post(Runnable r)方法,因为帧动画需要不断的重画,所以必须在线程中运行,否则只能看到第一帧的效果,这和我们做游戏的原理是一样的,一个人物的走动,是有线程在控制图片的不断重画。
当然还有另外一个方法也能实现:
@Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubmAnimation.start(); super.onWindowFocusChanged(hasFocus);}

最后就是在Activity中调用了,详情:

CustomProgressDialog dialog =new CustomProgressDialog(this, "正在加载中",R.anim.frame);dialog.show();
对于CustomProgressDialog这个自定义对话框类是封装的比较好的,调用起来十分方便,你可以快速的替换成你想要的效果,只需更改图片就可以了。
最后附上源代码,还不够理解的朋友可以下载看看,希望对你有所帮助;
http://download.csdn.net/detail/finddreams/8401429

Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)相关推荐

  1. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...

    Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果) 首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddr ...

  2. Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

    我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先 ...

  3. 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)

    最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...

  4. Android进阶UI之加载数据等待时,小人奔跑进度动画对话框

    ##1 概述 Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事 ...

  5. 安卓设置菊花动画_Android仿ios加载loading菊花图效果

    项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loading,一般用的比较多的是仿照ios 的菊花加载loading 图,当然一些条件下还会涉及到加载成功/ 失败情况 ...

  6. 自定义动画(仿Win10加载动画)——优化

    此为前文章写的仿Win10加载动画的优化版 源代码 已更新到github 优化分析 原生 自定义高仿(v1版) 一直觉得自己写的与原生的有差别,经过仔细对比观察,发现: 原生的圆点出发位置不是都在底部 ...

  7. Android Trick 3: GridView动态加载数据情况下,选中状态的实现

    GridView使用AdapterView动态加载数据情况下,无论是在onCreate.Onstart.OnResume方法中调用getChildCount()均为0,这说明数据并没有在Activit ...

  8. Apicloud中在frame中加载数据未完成时显示加载进度条

    想在frame中,数据未加载完成时显示加载的进度条,做法如下: 在index.html的 api.openFrameGroup()方法中: api.openFrameGroup({           ...

  9. Android RecyclerView(八)设置自定义 下拉刷新 与 上拉加载数据

    Android RecyclerView(八)设置下拉刷新 与 上拉加载数据 GitHub 项目源码 CSDN 博客说明 智慧安卓App 文章分析 下拉刷新效果 上拉加载数据效果 1 xml布局文件中 ...

  10. Android开发之ContentProvider结合LoaderManager加载数据(图文源代码分享)

    ContentProvider作为Android的四大存储方式之一,有着广泛的应用性,它暴露了数据地址,可以让其他应用访问数据,可以用于存储图片.通讯录等信息,这篇博文将详细介绍ContentProv ...

最新文章

  1. vue中子组件和子组件之间怎么通信_vue.js组件之间如何通信?
  2. 错误代码为0xC000218,0x00000051的蓝屏错误,或是提示 System32/config missing之类的注册表错误...
  3. windows 网络规划
  4. UA MATH564 概率论 QE练习题1
  5. SpringDataRedis对Redis的数据类型的常用操作API的使用代码举例
  6. mysql 服务端是否正常运行_如何确定mysql是否正常运行?(问题已解决:结帖)
  7. nod32可以限制软件安装么_玻璃钢法兰安装时可以别劲么 玻璃钢法兰安装视频
  8. 全国计算机等级考试题库二级C操作题100套(第79套)
  9. slot多作用域 vue_vue 深度长文之slot 篇
  10. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
  11. 剑指offer值二叉树的下一个结点
  12. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_15-异常处理-异常处理流程...
  13. MySQL InnoDB Cluster部署方案与实践
  14. 在div中加本地html,div加载另一个HTML页面
  15. Chrome 不支持 WebGL 怎么办
  16. 风险管理中的风险预测、风险评估、风险控制
  17. 布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希
  18. 使用html+css+js制作小米首页
  19. 基于区块链技术,机器市场经济来临
  20. 解决Surface Pro 系列 TF卡掉卡问题

热门文章

  1. [c51单片机]利用Protues 仿真C51单片机8位数码管
  2. Java遍历文件夹及图像缩放批处理
  3. Android NDK开发(一)环境搭建及运行示例
  4. 软件测试真实项目大全,真实案例-项目可用性测试总结
  5. PowerMILL基础入门到模具编程工艺讲解视频教程
  6. 台大Machine Learning 2017Fall HW0字数统计和图片淡化 解答
  7. 大学本科计算机专业的课程
  8. 快速了解Redis、Cachecloud集群的搭建及管理
  9. 计算机日志查询域用户登录记录,Windows域控制器身份验证登录日志记录和取证...
  10. P2P网贷谋求“去担保”:引入保险 收益下滑