Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)
用过美团客户端的朋友都知道,美团的加载等待提示很有意思,是一种动画的形式展现给我们,下面我们就对这背后的原理进行了解,然后实现自己的等待动画效果。
首先我们准备两张图片:
这两张图片看起来一模一样啊?细心的朋友会发现唯一不同的就在脚部,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实战简易教程-第五十六枪(模拟美团客户端进度提示框)相关推荐
- Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)
一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听 ...
- Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)
用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...
- Android实战简易教程-第五十一枪(ListView实现子控件的动态显示和隐藏、checkbox全选和反选)
前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容 ...
- Android实战简易教程-第五十枪(工具类的测试)
在开发中,为了提高开发效率,我们一般会自定义自己的工具类.为了保证项目的可靠性,在将工具类引入项目之前,我们一般都会对工具类进行单元测试,下面我们通过一个实例看一下如何搭建测试环境. 1.首先自定义一 ...
- Android实战简易教程-第七十五枪(WIFI直连工具类)
设置指定的WIFI用户名密码和加密方式,可以进行WIFI直连. 1.工具类-WifiUtil.java: package demo.androidwar.com.myapplication;impor ...
- Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...
上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了相似微信Tab的页面.可是这样的实现方法有个问题.就是以后全部的代码逻辑都必须在MainActivity中实 ...
- Android实战简易教程-第五十七枪(分享小米手电筒源码)
手电筒功能实现简单很实用,下面我们就来研究一下如何自制一款手电筒小程序,初学者可以通过实例了解原理,提高学习android技术的热情和动力. 首先我们了解一下手电筒要调用哪些android权限: &l ...
- Android实战简易教程-第六十枪(分享一个城市选择功能模块)
在做一些APP的时候可能会用到城市选择模块的功能,本实例可以提供位置自定定位和手动选择的功能,非常好用,大家可以修改后加入自己的项目中. 首先看一下效果: 1.进入有的手机可能会提示权限要求,这时我们 ...
- Android实战简易教程-第六十五枪(自定义控件实现数字液晶时钟Demo)
下面我们研究一下如何实现一个数字液晶时钟,本质属于特效一种哈. 首先创建一个布局文件: <?xml version="1.0" encoding="utf-8&qu ...
- Android实战简易教程-第六十六枪(服务器端搭建和服务器端Json数据交互)
学习Android有一段时间了,对服务器端有很深的好奇,决定对服务器端的实现进行一些研究,这里实现了一个简单的小例子,用于获取服务器端的json数据,例子很简单,适合初学者学习使用. 服务器端 首先我 ...
最新文章
- MyEclipse的Java Web项目配置环境搭建-如何安装tomact
- codeforces708C
- Redis介绍使用及进阶
- 高并发编程-Thread#interrupt用法及源码分析
- BAT集体升级云事业部,这背后都藏着哪些“小心思”?
- 题目:JavaWeb乐购资源管理系统(附源码链接免费下载)
- 使用expdp导出时评估所需存储容量大小
- python 输入10个整数_2019-07-18 python练习:编写一个程序,要求用户输入10个整数,然后输出其中最大的奇数,如果用户没有输入奇数,则输出一个消息进行说明。...
- python如何读取文件数据恢复_删python目录
- net.sf.json.JSONObject处理 null 字符串的一些坑
- idea查找类 方法在哪里被使用
- hadoop 权限错误 Permission denied: user=root, access=WRITE, inode=“/“:hdfs:super
- 百度富文本编辑器去掉自动保存功能
- 【同余最短路】P3403+P2371+P2662+牛客4853D
- 局域网管理工具_分享一款苹果手机文件管理工具
- 第04篇:手写JavaRPC框架之搞定网络通信
- 【CSDN软件工程师能力认证学习精选】SQL语句查询
- python装在固态还是机械好_大容量与高性能SSD硬盘的比较
- LED发光二极管电压
- QT+ffmpeg+SDL2播放视频流