首页 > 其他分享 >Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)

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

时间:2022-11-11 23:33:37浏览次数:45  
标签:layout 美团 private id content import 第五十六 Android android


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

首先我们准备两张图片:

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

Android实战简易教程-第五十六枪(模拟美团客户端进度提示框)_动画_02

这两张图片看起来一模一样啊?细心的朋友会发现唯一不同的就在脚部,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:自定义对话框
*
*/
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: 奔跑小人的动画进度条对话框,可以用作加载数据界面
*
*/
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方法隐藏;

}

}


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

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

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


标签:layout,美团,private,id,content,import,第五十六,Android,android
From: https://blog.51cto.com/u_15866446/5845587

相关文章

  • Ubuntu 1404 x64搭建Android开发环境
      最近在自己搭建了Android开发环境,在此记录一下。   一、安装配置JAVAJDK  不在此详细赘述, 验证:在终端中输入java、javac有信息输出。  二、安装配置A......
  • Android Notes | 个人集成推送那点事(友盟/Mob(Flutter)/FCM)
    我们都曾羡慕别人,却忘了,我们也曾是别人羡慕的我们。前言最近的任务呐,真是让人蛋碎一地,各种被锤。不过比较nice的是,推送凑齐了,可以整理一篇咯~点滴积累吧。跟着老大~前期调研......
  • 前端 Notes | H5 打开 App 并跳转指定页(Android/iOS)最 low 实现
    还是技术的世界简单,除了0就是1。前言之前接到一个任务,大概细分如下:H5调起App(Android/iOS)并打开对应页面;如果应用未安装,则提示用户进行下载;微信打开该链接分享好友展示......
  • Android Notes|细数「十大布局」那些事儿
    最近的心情,最近的状态,似乎没法说个一二三四五。做Android好几年了,从单纯的Android,到现在大杂烩,这个滋味儿,真的是百感交汇。文章的内容类型从来都是Notes,这次对老本行进......
  • Android 手记 | Android MobPush 接入小结
    序​手记|MobPush接入总结不瞒各位大佬,我想混个杯子,杯子被猫猫干碎了...PS:这不仅仅是一篇简单​​MobPush​​接入总结,同时也会掺杂个人理解以及不成熟的想法。接入的......
  • Android 通过Service给Activity添加背景音乐
    现在木鱼已经能发出声音了,而且还能表现出动态画面了,下一步就是给整个敲木鱼的页面添加个BGM。新建一个Service,取名为MyFirstBgmService好了packagecom.example.cyberwo......
  • Android 点击触发音效
    还是以那个木鱼举例吧点击木鱼(ImageButton),发出敲击声首先准备一段音频,muyu.mp3,在res文件夹下新建一个资源文件夹raw,将muyu.mp3扔进去  然后新建一个类用来播放音......
  • Android传感器 - 光强度传感器
    Android手机内部添加了光照强度传感器,可以实时监测手机周边环境的亮度,根据周边环境的亮度可以自动调节屏幕的亮度。下面通过一个实例看一下如何监测周边环境的亮度值。主布......
  • Android - 使用SpannableString设置复合文本
    TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式、事件方面的设置。Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能:1、Backg......
  • android属性之clearTaskOnLaunch
    clearTaskOnLaunch有没有这样的需求,每次从桌面进入都启动根Activity?可以使用这个属性实现哦,下面通过一个实例来看一下效果:1.MainActivity.java(根Activity):packagecom.examp......