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" >

    <item
        android:drawable="@drawable/progress_loading_image_01"
        android:duration="150"/>
    <item
        android: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);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initView();
		initData();
	}

	private void initData() {

		mImageView.setBackgroundResource(mResid);
		// 通过ImageView对象拿到背景显示的AnimationDrawable
		mAnimation = (AnimationDrawable) mImageView.getBackground();

		mImageView.post(new Runnable() {
			@Override
			public 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" >

    <ImageView
        android:id="@+id/loadingIv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@anim/frame_meituan"/>

    <TextView
        android: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;
	@Override
	protected 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() {

			@Override
			public void run() {

				dialog.dismiss();
			}
		}, 3000);//3秒钟后调用dismiss方法隐藏;

	}

}

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

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

源码免费下载

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 14:25:22

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

Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)

一.概念及相关方法 android中实现定时任务一般有两种实现方式,一种是使用Java API中提供的Timer类,一种是使用android的Alarm机制.Timer机制有个短板就是不太适用于那些需要长期在后台运行的任务,我们都知道为了让电池更加耐用,会在长时间不操作手机的情况下,CPU进入休眠状态,这是可能导致Timer中的定时任务无法正确运行.所以我们重点来研究一下Alarm机制. AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,

Android实战简易教程-第三十六枪(监听短信)

一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听手机短信. 一.获取短信全部内容 1.新建一个SMSBroadcastReceiver: <code class="hljs java has-numbering"><span class="hljs-keyword">package</s

Android实战简易教程-第四十六枪(自定义控件体验之罗盘)

前言 作为一名有创新意思的开发人员,你迟早会发现内置的控件会满足不了你的想象力. 拥有扩展已存在的视图.组建复合的控件以及创建独特的新视图能力,可以创建出最适合自己应用程序工作流的有优美用户界面,让用户得到最优的体验. 创建新视图的最佳方法和希望达到的目标有关: 1.如果现有控件已经可以满足希望实现的基本功能,那么只需对现有控件的外观或行为进行修改或扩展即可.通过重写事件处理程序和onDraw()方法. 2.可以通过组合多个视图来创建不可分割的.可重用的控件,从而使它可以综合使用过个相关联的视图

Android实战简易教程-第五十九枪(EventBus小实例-传值、控制其他页控件显示)

页面之间的传值,有android基础的童鞋都会知道,可以通过Intent进行传值,但是动态控制另一个页面控件的显示恐怕这个就不好用了吧,下面我们介绍一个比较好用的框架-EventBus,通过实例介绍它的使用(要引入jar包才能使用EventBus,jar包在源码下载中). 一.介绍一下EventBus 使用EventBus的步骤: 1.新建一个类:作为消息类 /** * */ package com.example.eventbusdemo; /** * @author yayun * @sin

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

一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听手机短信. 一.获取短信全部内容 1.新建一个SMSBroadcastReceiver: package com.example.messagecut; import java.text.SimpleDateFormat; import java.util.Date; import android.

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

用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以自行注册,得到APPKEY和APPSECRET,然后下载SDK,包的导入方式如截图: 二.主要代码 SMSSendForRegisterActivity.java:(获取验证码页) package com.qiandaobao.activity; import java.util.regex.Mat

Android实战简易教程-第五十四枪(通过实现OnScrollListener接口实现下拉刷新功能)

上一篇文章Android实战简易教程-第五十三枪(通过实现OnScrollListener接口实现上拉加载更多功能)讲述了如何实现上拉加载更多的功能,本篇,我们在上一篇的基础上实现下拉刷新功能.主要通过对滚动状态和手势监听实现这一功能,下面我们看一下代码: 1.header.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sch

Android实战简易教程-第五十五枪(窃听风云之电话录音上传)

前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传.这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音. 一.配置bmob 配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下: 然后配置权限: <uses-permission android:name="andr

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

前段时间写过一篇文章:Android实战简易教程-第四十七枪(ListView多选-实现点餐系统)有的同学留言建议,可不可以动态控制checkbox的显示和全选反选功能,我研究了一下,发现实现也比较容易,特写下此篇文章.学习就是要有发散思维,要举一反三,大家也可以根据我的实例进行改编,添加和删除一些功能,这样可以提高你对知识的认知!下面我们看一下代码: 1.main.xml: <?xml version="1.0" encoding="utf-8"?>