用过美团客户端的朋友都知道,美团的加载等待提示很有意思,是一种动画的形式展现给我们,下面我们就对这背后的原理进行了解,然后实现自己的等待动画效果。

首先我们准备两张图片:

这两张图片看起来一模一样啊?细心的朋友会发现唯一不同的就在脚部,OK,我们就利用这两张图片的轮换播放实现动画效果,下面看一下代码:

1.动画文件frame_meituan.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/progress_loading_image_01"android:duration="150"/><itemandroid:drawable="@drawable/progress_loading_image_02"android:duration="150"/></animation-list>

150毫秒进行图片的切换,模拟动画效果。

2.简单自定义一个控件-MeituanProgressDialog.java:

package com.finddreams.runningman;import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;import com.example.runningman.R;/*** @Description:自定义对话框* @author http://blog.csdn.net/yayun0516*/
public class MeituanProgressDialog 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;/*** * @param context*            上下文对象* @param content*            显示文字提示信息内容* @param id*            动画id*/public MeituanProgressDialog(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();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);}}

上面用到的提示布局文件的progress_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="vertical" ><ImageViewandroid:id="@+id/loadingIv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@anim/frame_meituan"/><TextViewandroid:id="@+id/loadingTv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/loadingIv"android:layout_centerHorizontal="true"android:textSize="20sp"android:text="正在加载中.." /></RelativeLayout>

最后在Activity中调用:

package com.finddreams.runningman;import com.example.runningman.R;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
/*** @Description: 奔跑小人的动画进度条对话框,可以用作加载数据界面* @author http://blog.csdn.net/yayun0516*/
public class MeiTuanManActivity extends Activity {private MeituanProgressDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.meituan_progressdialog);}/*** 显示美团进度对话框* @param v*/public void showmeidialog(View v){dialog =new MeituanProgressDialog(this, "正在加载中",R.anim.frame_meituan);dialog.show();Handler handler =new Handler();handler.postDelayed(new Runnable() {@Overridepublic void run() {dialog.dismiss();}}, 3000);//3秒钟后调用dismiss方法隐藏;}}

最后,让我们的程序跑起来:

ok,跑起来了,你想要加入你的项目,只需要准备两张图片替换下来即可模拟动画。

源码免费下载

最后关注我一下呗,谢谢!

Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)相关推荐

  1. Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)

    一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听 ...

  2. Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

    用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...

  3. Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)

    前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容 ...

  4. Android实战简易教程-第五十枪(工具类的测试)

    在开发中,为了提高开发效率,我们一般会自定义自己的工具类.为了保证项目的可靠性,在将工具类引入项目之前,我们一般都会对工具类进行单元测试,下面我们通过一个实例看一下如何搭建测试环境. 1.首先自定义一 ...

  5. Android实战简易教程-第七十五枪(WIFI直连工具类)

    设置指定的WIFI用户名密码和加密方式,可以进行WIFI直连. 1.工具类-WifiUtil.java: package demo.androidwar.com.myapplication;impor ...

  6. Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...

    上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了相似微信Tab的页面.可是这样的实现方法有个问题.就是以后全部的代码逻辑都必须在MainActivity中实 ...

  7. Android实战简易教程-第五十七枪(分享小米手电筒源码)

    手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习android技术的热情和动力. 首先我们了解一下手电筒要调用哪些android权限: &l ...

  8. Android实战简易教程-第六十枪(分享一个城市选择功能模块)

    在做一些APP的时候可能会用到城市选择模块的功能,本实例可以提供位置自定定位和手动选择的功能,非常好用,大家可以修改后加入自己的项目中. 首先看一下效果: 1.进入有的手机可能会提示权限要求,这时我们 ...

  9. Android实战简易教程-第六十五枪(自定义控件实现数字液晶时钟Demo)

    下面我们研究一下如何实现一个数字液晶时钟,本质属于特效一种哈. 首先创建一个布局文件: <?xml version="1.0" encoding="utf-8&qu ...

  10. Android实战简易教程-第六十六枪(服务器端搭建和服务器端Json数据交互)

    学习Android有一段时间了,对服务器端有很深的好奇,决定对服务器端的实现进行一些研究,这里实现了一个简单的小例子,用于获取服务器端的json数据,例子很简单,适合初学者学习使用. 服务器端 首先我 ...

最新文章

  1. MyEclipse的Java Web项目配置环境搭建-如何安装tomact
  2. codeforces708C
  3. Redis介绍使用及进阶
  4. 高并发编程-Thread#interrupt用法及源码分析
  5. BAT集体升级云事业部,这背后都藏着哪些“小心思”?
  6. 题目:JavaWeb乐购资源管理系统(附源码链接免费下载)
  7. 使用expdp导出时评估所需存储容量大小
  8. python 输入10个整数_2019-07-18 python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。...
  9. python如何读取文件数据恢复_删python目录
  10. net.sf.json.JSONObject处理 null 字符串的一些坑
  11. idea查找类 方法在哪里被使用
  12. hadoop 权限错误 Permission denied: user=root, access=WRITE, inode=“/“:hdfs:super
  13. 百度富文本编辑器去掉自动保存功能
  14. 【同余最短路】P3403+P2371+P2662+牛客4853D
  15. 局域网管理工具_分享一款苹果手机文件管理工具
  16. 第04篇:手写JavaRPC框架之搞定网络通信
  17. 【CSDN软件工程师能力认证学习精选】SQL语句查询
  18. python装在固态还是机械好_大容量与高性能SSD硬盘的比较
  19. LED发光二极管电压
  20. QT+ffmpeg+SDL2播放视频流

热门文章

  1. c语言编程中exp,c语言中exp是什么函式
  2. 逃离996的年轻人却难逃租房的“坑”
  3. Rust学习:13.1_返回值和错误处理之panic 深入剖析
  4. WI-FI STA的电源管理模式---容易混淆的概念说明
  5. PCA:详细解释主成分分析
  6. 在企业中采用知识管理工具的好处
  7. 相机和镜头选型的关键:像素尺寸与景深
  8. 怎样写商业计划书 【转载】
  9. 【PR】PR剪辑视频片段并保存
  10. Python自动发抖音脚本教程(1:介绍和源码)