Android loading进度条使用简单总结
在这里,总结一下loading进度条的使用简单总结一下。
一、说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验。
先来找图看看,做这个图完成不用图片就可以做到了。
看下xml布局文件,其实就是直接用xml写的在加两个属性设置一下就好了,一个style,另一个是background。
- <ProgressBar
- android: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" />
- <gradient
- android: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" />
- <gradient
- android: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" />
- <gradient
- android: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:边界的间隔-->
- <padding
- android: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() {
- @Override
- public void onAnimationStart(Animation arg0) {
- }
- @Override
- public void onAnimationRepeat(Animation arg0) {
- }
- @Override
- public 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" >
- <RelativeLayout
- android:id="@+id/bgLayout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#66000000" >
- <View
- android: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() {
- @Override
- public void onAnimationStart(Animation arg0) {
- }
- @Override
- public void onAnimationRepeat(Animation arg0) {
- }
- @Override
- public 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;
- @Override
- protected 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);
- }
- @Override
- public 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;
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- loadingColorDialog.dismiss();
- }
- @Override
- public 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
谁要项目的请留下邮箱吧,还没上传好源文件呢,有什么问题留言哦,大家晚安吧。
Android loading进度条使用简单总结的更多相关文章
- Android多种进度条使用详解
在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...
- android 自定义进度条颜色
android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程! 这个没法了只能看源码了,还好下载了源码, sources\b ...
- Android 设置进度条背景
Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...
- JavaScript之Loading进度条
一个loading进度条,定义一个fakeProgress方法,定位一个URL,然后setTimeout设置跳转时间我们就能看到我们要打开的URL网址了. 这个链接我就直接链接到我的新浪博客去了,算是 ...
- Android之进度条2
我之前有写过一篇“Android之进度条1”,那个是条形的进度条(显示数字进度),这次实现圆形进度条. 点击查看Android之进度条1:http://www.cnblogs.com/caidupin ...
- android的进度条使用
android的进度条 1.实现的效果 2.布局代码 先写一个my_browser.xml文件 存放WebView <?xml version="1.0" encoding= ...
- ASP.NET 给Web中的网页添加Loading进度条形式
前段时间客户提了一个需求,要求给网站中某些功能添加进度条形式,因为某些功能查询的数据量太大,经常会出现点击Search按钮,但是没有任何反应的情况,会让用户以为网站挂掉了,导致投诉的事情发生,所以客户 ...
- android多线程进度条
多线程实现更新android进度条. 实例教程,详细信息我已经注释 android多线程进度条 01package com.shougao.hello; 02 03import android ...
- 模态框的理解 ,jQ: loading,进度条, 省级联动 表单验证 插件
模态框: 打开一个弹框 不关闭它就不能做框外的操作 必须关闭或弹出另外的弹框 加载延迟loading + 进度条只要有请求 就处理一下监控ajax 全局事件jquery: $('#box').ajax ...
随机推荐
- Window 常用命令
Window 常用命令 Ctrl +alt +delete 切换用户 Ctrl +shift+esc 启动任务管理
- java笔记--使用事件分配线程更新Swing控件
使用事件分配线程更新Swing控件: Swing并不是线程安全的,如果在多个线程中更新Swing控件,则很可能造成程序崩溃. 为了避免这种问题,可以使用时间分配线程来更新Swing控件. EventQ ...
- [codeforces 241]A. Old Peykan
[codeforces 241]A. Old Peykan 试题描述 There are n cities in the country where the Old Peykan lives. The ...
- Correlation Filter in Visual Tracking
涉及两篇论文:Visual Object Tracking using Adaptive Correlation Filters 和Fast Visual Tracking via Dense Spa ...
- MYSQL随机抽取查询 MySQL Order By Rand()效率问题
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机 ...
- 新浪网易淘宝等IP地区信息查询开放API接口调用方法
通过IP地址获取对应的地区信息通常有两种方法:1)自己写程序,解析IP对应的地区信息,需要数据库.2)根据第三方提供的API查询获取地区信息. 第一种方法,参见文本<通过纯真IP数据库获取IP地 ...
- js 函数定义三种方式
<p>Js 函数定义的三种方式:</p> <br> <p>方式一:function</p> <script type="te ...
- Android简易数据存储之SharedPreferences
Andorid提供了多种数据存储的方式,例如前面说到的“Android数据存储之SQLite的操作”是用于较复杂的数据存储.然而,如果有些简单的数据存储如果采用SQLite的方式的话会显得比较笨重.例 ...
- Android 和iOS中 View的滚动
在最近的程序中用到了Android中的View的滚动,记录一下,待总结.
- Deeplink做不出效果,那是你不会玩!
最近魔Sir听一些有些同学说之前用过Deeplink,但效果并没有想象中的那么好,在了解了小伙伴的使用场景后,魔Sir觉得有必要出这么篇东西告诉大家,Deeplink效果差,那是因为你不会玩! 对于已 ...