Android loading进度条使用简单总结

在这里,总结一下loading进度条的使用简单总结一下。

一、说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验。

先来找图看看,做这个图完成不用图片就可以做到了。

看下xml布局文件,其实就是直接用xml写的在加两个属性设置一下就好了,一个style,另一个是background。

    <ProgressBarandroid:id="@+id/pb_progressbar"style="@style/StyleProgressBarMini"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_margin="30dp"android:background="@drawable/shape_progressbar_bg"android:max="100"android:progress="50" />

先看style吧

    <style name="StyleProgressBarMini" parent="@android:style/Widget.ProgressBar.Horizontal">  <item name="android:maxHeight">50dip</item>  <item name="android:minHeight">10dip</item>  <item name="android:indeterminateOnly">false</item>  <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>  <item name="android:progressDrawable">@drawable/shape_progressbar_mini</item>  </style>

这里的progressDrawable又是引用一个自定义drawable,不是图片哦。

shape_progressbar_mini.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 背景 --><item android:id="@android:id/background"><shape><corners android:radius="5dip" /><gradientandroid:angle="270"android:centerY="0.75"android:endColor="#FFFFFF"android:startColor="#FFFFFF" /></shape></item><item android:id="@android:id/secondaryProgress"><clip><shape><corners android:radius="0dip" /><gradientandroid:angle="270"android:centerY="0.75"android:endColor="#df0024"android:startColor="#df0024" /></shape></clip></item><item android:id="@android:id/progress"><clip><shape><corners android:radius="5dip" /><gradientandroid:angle="270"android:centerY="0.75"android:endColor="#de42ec"android:startColor="#de42ec" /></shape></clip></item>
</layer-list>

再来看看shape_progressbar_bg.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle" ><!-- 边框填充的颜色 --><solid android:color="#cecece" /><!-- 设置进度条的四个角为弧形 --><!-- android:radius 弧形的半径 --><corners android:radius="90dp" /> <!--padding:边界的间隔--><paddingandroid:bottom="1dp"android:left="1dp"android:right="1dp"android:top="1dp" />
</shape>

就这样把一个漂亮的条形进度条做好了,在shape_progressbar_bg.xml中,边框填充的颜色是一种挺好的方法,加了一个进度条的边框。另外为了进度条四个角都是圆形的,就用了这个属性<corners android:radius="90dp" /> 。

搞定,这个时候可以开心一下了,去喝杯水先。

 

二、圆形进度条。另一个比较常用的就是圆形进度条,表示正在进行中。。。

来看2张小图

 

先看第一张,分析下代码,用自定义的view,用pop来做的哦。LoadingDialog.java

public class LoadingDialog {private Context context;private PopupWindow popupDialog;private LayoutInflater layoutInflater;private RelativeLayout layout;private RelativeLayout layout_bg;private View circleView;private RotateAnimation rotateAnim;private AlphaAnimation alphaAnim_in;private AlphaAnimation alphaAnim_out;public LoadingDialog(Context context) {layoutInflater = LayoutInflater.from(context);this.context = context;}private void initAnim() {rotateAnim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);rotateAnim.setDuration(2000);rotateAnim.setRepeatMode(Animation.RESTART);rotateAnim.setRepeatCount(-1);rotateAnim.setInterpolator(new LinearInterpolator());alphaAnim_in = new AlphaAnimation(0f, 1f);alphaAnim_in.setFillAfter(true);alphaAnim_in.setDuration(200);alphaAnim_in.setInterpolator(new LinearInterpolator());alphaAnim_out = new AlphaAnimation(1f, 0f);alphaAnim_out.setFillAfter(true);alphaAnim_out.setDuration(100);alphaAnim_out.setInterpolator(new LinearInterpolator());alphaAnim_out.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation arg0) {}@Overridepublic void onAnimationRepeat(Animation arg0) {}@Overridepublic void onAnimationEnd(Animation arg0) {dismiss();}});}/*** 判断是否显示* @return*/public boolean isShowing() {if (popupDialog != null && popupDialog.isShowing()) {return true;}return false;}/*** 显示*/public void show() {dismiss();initAnim();layout = (RelativeLayout) layoutInflater.inflate(R.layout.view_loadingdialog, null);circleView = (View) layout.findViewById(R.id.loading_dialog);layout_bg = (RelativeLayout) layout.findViewById(R.id.bgLayout);popupDialog = new PopupWindow(layout, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);View parentView = ((Activity) context).getWindow().findViewById(Window.ID_ANDROID_CONTENT);popupDialog.showAtLocation(parentView, Gravity.CENTER, 0, 0);layout_bg.startAnimation(alphaAnim_in);circleView.startAnimation(rotateAnim);}/*** 隐藏*/public void dismiss() {if (popupDialog != null && popupDialog.isShowing()) {layout_bg.clearAnimation();circleView.clearAnimation();popupDialog.dismiss();}}
}

这里呢引用了view_loadingdialog.xml,已作整个页面的背景和loading框。

view_loadingdialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" >
<RelativeLayoutandroid:id="@+id/bgLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#66000000" ><Viewandroid:id="@+id/loading_dialog"android:layout_width="48dp"android:layout_height="48dp"android:layout_centerInParent="true"android:background="@drawable/shape_loading_dialog" />
</RelativeLayout>
</RelativeLayout>

再看看这个shape_loading_dialog.xml,绘制转动的圆形性状,又不用图片挺好的。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval" ><stroke android:width="3dp"android:dashWidth="2dp"android:dashGap="3dp"android:color="#fff"/><gradient android:startColor="#00ffffff"android:endColor="#00ffffff"android:angle="180"/>
</shape>

就是这样子,实现了第一个圆形进度条。

可是如果做有颜色的圆形进度条呢,或者彩色的,后来想想不如加个图片来实现好了。

LoadingImgDialog.java

public class LoadingImgDialog {private Context context;private PopupWindow popupDialog;private LayoutInflater layoutInflater;private RelativeLayout layout;private RelativeLayout layout_bg;private int residBg;private View loading_dialog;/** 背景添加旋转动画效果,实现了转动动作   **/private RotateAnimation rotateAnim;/** 透明度动画效果  **/private AlphaAnimation alphaAnim_in;private AlphaAnimation alphaAnim_out;public LoadingImgDialog(Context context, int residBg) {layoutInflater = LayoutInflater.from(context);this.residBg = residBg;this.context = context;}private void initAnim() {rotateAnim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);rotateAnim.setDuration(2000);rotateAnim.setRepeatMode(Animation.RESTART);rotateAnim.setRepeatCount(-1);rotateAnim.setInterpolator(new LinearInterpolator());alphaAnim_in = new AlphaAnimation(0f, 1f);alphaAnim_in.setFillAfter(true);alphaAnim_in.setDuration(200);alphaAnim_in.setInterpolator(new LinearInterpolator());alphaAnim_out = new AlphaAnimation(1f, 0f);alphaAnim_out.setFillAfter(true);alphaAnim_out.setDuration(100);alphaAnim_out.setInterpolator(new LinearInterpolator());/** 监听动作,动画结束时,隐藏LoadingColorDialog **/alphaAnim_out.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation arg0) {}@Overridepublic void onAnimationRepeat(Animation arg0) {}@Overridepublic void onAnimationEnd(Animation arg0) {dismiss();}});}/*** 判断是否显示* @return*/public boolean isShowing() {if (popupDialog != null && popupDialog.isShowing()) {return true;}return false;}/*** 显示*/public void show() {dismiss();initAnim();layout = (RelativeLayout) layoutInflater.inflate(R.layout.view_loadingcolordialog, null);loading_dialog = (View) layout.findViewById(R.id.loading_dialog);loading_dialog.setBackgroundResource(residBg);layout_bg = (RelativeLayout) layout.findViewById(R.id.bgLayout);popupDialog = new PopupWindow(layout, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);View parentView = ((Activity) context).getWindow().findViewById(Window.ID_ANDROID_CONTENT);popupDialog.showAtLocation(parentView, Gravity.CENTER, 0, 0);layout_bg.startAnimation(alphaAnim_in);loading_dialog.startAnimation(rotateAnim);}/*** 隐藏*/public void dismiss() {if (popupDialog != null && popupDialog.isShowing()) {layout_bg.clearAnimation();loading_dialog.clearAnimation();popupDialog.dismiss();}}
}

其实就是修改了一个地方,加入residBg,用图片资源设置圆形进度条那一小部分的背景。

稍稍修改一句代码换一张图片,就变成了另一个圆形进度条了,好玩吧。

		loadingColorDialog = new LoadingImgDialog(this, R.drawable.img_loading);loadingColorDialog2 = new LoadingImgDialog(this, R.drawable.img_loading2);

给看看全屏效果图吧,就稍稍修改一句代码换一张图片哦。

最后给MainActivity.java看看

public class MainActivity extends Activity implements OnClickListener {Button bt_loading_dialog;Button bt_color_loading_dialog;Button bt_color_loading_dialog2;LoadingDialog loadingDialog;LoadingImgDialog loadingColorDialog;LoadingImgDialog loadingColorDialog2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {bt_loading_dialog = (Button) findViewById(R.id.bt_loading_dialog);bt_loading_dialog.setOnClickListener(this);bt_color_loading_dialog = (Button) findViewById(R.id.bt_loading_img_dialog);bt_color_loading_dialog.setOnClickListener(this);bt_color_loading_dialog2 = (Button) findViewById(R.id.bt_loading_img_dialog2);bt_color_loading_dialog2.setOnClickListener(this);loadingDialog = new LoadingDialog(this);loadingColorDialog = new LoadingImgDialog(this, R.drawable.img_loading);loadingColorDialog2 = new LoadingImgDialog(this, R.drawable.img_loading2);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.bt_loading_dialog:loadingDialog.show();break;case R.id.bt_loading_img_dialog:loadingColorDialog.show();break;case R.id.bt_loading_img_dialog2:loadingColorDialog2.show();break;default:break;}}@Overrideprotected void onDestroy() {super.onDestroy();loadingColorDialog.dismiss();}@Overridepublic void onBackPressed() {if (loadingDialog.isShowing()) {loadingDialog.dismiss();} else if (loadingColorDialog.isShowing()){loadingColorDialog.dismiss();} else if (loadingColorDialog2.isShowing()){loadingColorDialog2.dismiss();} else {finish();}}}

 

本文链接:http://www.cnblogs.com/liqw/p/3995794.html

下载地址:http://download.csdn.net/detail/lqw770737185/8002967

 谁要项目的请留下邮箱吧,还没上传好源文件呢,有什么问题留言哦,大家晚安吧。

转载于:https://www.cnblogs.com/liqw/p/3995794.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET6之MiniAPI(二十二):HttpClient

说明&#xff1a;本篇不是说明HttpClient怎么使用&#xff0c;而以分享在asp.net core mini api框架下&#xff0c;HttpClient的引入和使用方式。我们在业务开发中&#xff0c;免不了调用三方的服务&#xff0c;这时就会用到HttpClient&#xff0c;在早期的asp.net core框架中&…

《超越需求:敏捷思维模式下的分析》—第1章 1.1节简介

本节书摘来自异步社区《超越需求&#xff1a;敏捷思维模式下的分析》一书中的第1章&#xff0c;第1.1节简介&#xff0c;作者【美】Kent J. McDonald&#xff08;肯特 J. 麦克唐纳&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 第一部分 理念…

sublime php语法检查

安装sublimelinter 安装sublimelinter-php 设置sublimelinter 进入SublimeLinter文件夹改动 SublimeLinter.sublime-settings文件 设置php文件夹

使用python获取焦点窗口的进程名称

我正在尝试使用python获取当前焦点窗口的进程名称。现在&#xff0c;我正在与此&#xff1a; import pygetwindow as gw print(gw.getActiveWindow().title)问题在于&#xff0c;这只会显示活动窗口的名称&#xff0c;实际上并没有太大帮助&#xff0c;因为有时应用程序的标题…

Android之jni编译出现no matching function for call to ‘_JNIEnv::GetJava(JNIEnv* , Java VM**)‘解决办法)‘

1、问题 jni编译出现这个错误 no matching function for call to _JNIEnv::GetJava(JNIEnv* &, Java VM**) 2、原因 自己写的 JObject obj NULL; &#xff08;*env&#xff09;->GetObjectClass(env, obj); 这个是在C文件里面这样写&#xff0c;但是cpp文件里面就…

POJ 2240 ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0

http://poj.org/problem?id2240 用log化乘法为加法找正圈 c 110ms,gtle #include <string> #include <map> #include <iostream> #include <cmath> #include <cstring> #include <queue> using namespace std; const int maxn 50; bool …

lv13 环境搭建SD卡启动

一、制作SD卡启动盘 1.1 方法1&#xff1a;在Linux下制作 一、准备好烧录脚本 cd ~/fs4412 ​ unzip sdfuse_q.zip ​ cd sdfuse_q ​ chmod x *.sh 二、将SD卡插入USB读卡器&#xff0c;并连接到虚拟机 或者 一般识别的sd卡会在dev目录下显示sdb 三、烧录 cp ../u-boot-f…

如何使用c#编写单片机程序

因为个人喜爱想研究单片机&#xff0c;但是不太会c&#xff0c;然后再找资料研究有没有其他的方法发现国外的c# nanoframework 框架可以编写单片机程序&#xff0c;本文我将会用自己踩过的坑来总结一些c#编写单片机的一些经验&#xff0c;希望帮到热爱c#的xd 首先第一步我们需要…

机器学习与数据挖掘——第二章 数据与数据预处理

一、关于数据 什么是数据&#xff1f; 数据是数据对象的集合及其属性 属性的类型 标称标度 nominal scale 标称属性的值是一些符号或实物的名称&#xff0c;每个值代表某种类别、编码或状态&#xff0c;所以标称属性又被看做是分类型的属性&#xff08;categorical&#xff…

《 线性代数及其应用 (原书第4版)》——1.2 行化简与阶梯形矩阵

本节书摘来自华章出版社《 线性代数及其应用 &#xff08;原书第4版&#xff09;》一书中的第1章&#xff0c;第1.2节&#xff0c;作者:&#xff08;美&#xff09;戴维C. 雷&#xff08;David C. Lay&#xff09;马里兰大学帕克学院 著刘深泉 张万芹 陈玉珍 包乐娥 陆 博 译&a…

Android之jni解决JNIEnv跨线程问题

1、问题 JNIEnv是一个线程相关的变量 JNIEnv 对于每个 thread 而言是唯一的 JNIEnv *env指针不可以为多个线程共用 2、解决办法 java虚拟机的JavaVM指针是整个jvm公用的,我们可以用JavaVM来得到当前线程的JNIEnv指针,可以使用javaAttachThread保证取得当前线程的Jni环境…

SQL Server 提高创建索引速度的 2 个方法

方法 1、 使用tempdb来提速 create index index_name on table_name (column_list) with(sort_in_tempdb on); 方法 2、 使用多线程为来提速 create index index_name on table_name (column_list) with(maxdop 4); maxdop ( max dgree of parallelism)这下记到了吧 转载于:h…

iOS基础-高级视图-UITableView--静态单元格

静态单元格适用场合&#xff1a;分为好几组且图标和内容不规则。并且百年不变动。1.新建一个MJViewController&#xff0c;继承自TableViewController2.将storyboard的控制器View删除&#xff0c;拖一个TableViewController&#xff0c;将Class设置为MJViewController3.将Conte…

c#使用FluentFtp实现一行代码实现ftp上传下载等

一:简介FluentFTP 是一个完全托管的 .NET 和 .NET Standard 的 FTP 和 FTPS 库&#xff0c;针对速度进行了优化。它提供了广泛的 FTP 命令、文件上传/下载、SSL/TLS 连接、自动目录列表解析、文件哈希/校验和、文件权限/CHMOD、FTP 代理、FXP 传输、UTF-8 支持、异步/等待支持、…

软件体系结构知识点整理

包括软件体系结构风格、uml、软件质量属性、面向对象设计原则以及设计模式 pdf及goodnote版本

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...

本节书摘来自异步社区出版社《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》一书中的第1章&#xff0c;第1.2节&#xff0c;作者&#xff1a; 【美】Itzik Ben-Gan&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 使用窗口函数的解决方案简介 …

第一台定制商用NAS存储服务器

记得前不久在网络上看到有人在问有没有人将openfiler进行实际应用&#xff0c;以我看应该是有的&#xff0c;而且不少&#xff0c;你是否在用&#xff0c;或者曾经用过呢&#xff1f;LINUX加PC主机来定制各种应用型服务器&#xff0c;一直是我想去推广的&#xff0c;也就是如何…

[Java] java中的接口定义

在Java的通常规范中&#xff0c;对数据成员的修改要通过接口提供的方法进行&#xff08;如下面示例中接口中的void learnMath(int hours)和void learnEnglish(int hours)&#xff09;&#xff0c;这个规范起到了保护数据的作用。用户不能直接修改数据&#xff0c;必须通过相应的…

ASP.NET Core(十)Configuration 配置优先级详解

ASP.NET Core 项目启动&#xff0c;默认执行顺序为&#xff1a;宿主 Host -> 读取配置 -> 日志设置 -> 注册服务&#xff08;DI&#xff09;-> 添加中间件 -> WebHost 监听 -> 后台 Work 启动。配置的加载和读取是在启动流程的最前面。微软关于 ASP.NET Core…

《BeagleBone开发指南》——1.7 小结

本节书摘来异步社区《BeagleBone开发指南》一书中的第1章&#xff0c;第1.7节&#xff0c;作者&#xff1a;【爱】Derek Molloy&#xff08;莫洛伊&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.7 小结 在完成本章后&#xff0c;你应该具备…