Android实现弹窗进度条效果

Android自定义进度条主要是修改ProgressBar的style,弹窗则是在Dialog里显示ProgressBar。

直接上代码。

在style.xml里加入如下代码:

<style name="ProgressBar_Mini" parent="@android:style/Widget.ProgressBar.Horizontal">
  <item name="android:maxHeight">50dip</item>
  <item name="android:minHeight">8dip</item>
  <item name="android:indeterminateOnly">false</item>
  <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
  <item name="android:progressDrawable">@drawable/progressbar_mini</item>
</style> 
<style name="dialog" parent="@android:style/Theme.Dialog">
  <item name="android:windowFrame">@null</item>
  <item name="android:windowIsFloating">true</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:backgroundDimEnabled">true</item>
  <item name="android:windowBackground">@color/transparent</item>
 </style>

新建drawable/progressbar_mini.xml内容如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 <item android:id="@android:id/background">
  <shape>
   <corners android:radius="0dip" />
   <gradient
    android:angle="270"
    android:centerY="0.75"
    android:endColor="#F5F5F5"
    android:startColor="#BEBEBE" />
  </shape>
 </item> 

 <item android:id="@android:id/secondaryProgress">
  <clip>
   <shape>
    <corners android:radius="0dip" />
    <gradient
     android:angle="270"
     android:centerY="0.75"
     android:endColor="#165CBC"
     android:startColor="#85B0E9" />
   </shape>
  </clip>
 </item> 

 <item android:id="@android:id/progress">
  <clip>
   <shape>
    <corners android:radius="0dip" />
    <gradient
     android:angle="270"
     android:centerY="0.75"
     android:endColor="#00FF66"
     android:startColor="#00FF66" />
   </shape>
  </clip>
 </item>
</layer-list> 

myprogressbar.xml的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@drawable/back_qian"
 android:gravity="center"
 android:orientation="vertical" > 

 <TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:text="正在切换状态...."
  android:textSize="18sp"
  android:textColor="@color/black" /> 

 <TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:text="" /> 

<ProgressBar
 android:id="@+id/progressBar1"
 style="@style/ProgressBar_Mini"
 android:layout_width="290dp"
 android:layout_height="17dp" /> 

</LinearLayout> 

MyProgressBar.java的内容如下:

package com.wl.util; 

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar; 

import com.wl.R; 

public class MyProgressBar {
 Dialog dialog;
 Context context;
 // 声明ProgressBar对象
 private ProgressBar pro1; 

 /**
  * 构造
  */
 public MyProgressBar(Context context) {
  // TODO Auto-generated constructor stub
  this.context = context;
  dialog = new Dialog(context, R.style.dialog);
  dialog.setOnCancelListener(onCancelListener);
 } 

 /**
  * 初始化进度对话框
  */
 public void initDialog() { 

  LayoutInflater inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  View view = inflater.inflate(R.layout.myprogressbar, null);
  dialog.setContentView(view);
  pro1 = (ProgressBar) dialog.findViewById(R.id.progressBar1);
  // 设置进度条是否自动旋转,即设置其不确定模式,false表示不自动旋转
  pro1.setIndeterminate(false);
  // 设置ProgressBar的最大值
  pro1.setMax(100); 

  // 设置ProgressBar的当前值
  pro1.setProgress(0); 

  dialog.show();
 } 

 public void setProgress(int progressValue) {
  pro1.setProgress(progressValue);
 } 

 public void colseDialog() {
  dialog.dismiss();
 } 

 public boolean isShowing() {
  if (dialog.isShowing()) {
   return true;
  } else {
   return false;
  }
 } 

 OnCancelListener onCancelListener = new OnCancelListener() {
  @Override
  public void onCancel(DialogInterface dialog) {
   // TODO Auto-generated method stub
   dialog.dismiss();
  }
 };
}

调用代码如下:

MyProgressBar myProgressBar;
myProgressBar = new MyProgressBar(Dialog_TestActivity.this);
myProgressBar.initDialog();
    new Thread(new Runnable() {
     @Override
     public void run() {
      // TODO Auto-generated method stub 

      try {
       Thread.sleep(200);
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      for (int i = 0; i < 100; i++) {
       handler.sendEmptyMessage(0);
       try {
        Thread.sleep(30);
       } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
     }
    }).start();
Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   // 改变ProgressBar的当前值
   myProgressBar.setProgress(intCounter++);
   if (intCounter == 100) {
    intCounter = 0;
    myProgressBar.colseDialog();
   }
  }
 }; 

按返回退出:

@Override
 public void onBackPressed() {
  // TODO Auto-generated method stub
  Log.d("11", "onBackPressed()"); 

  if (myProgressDialog.isShowing()) {
   myProgressDialog.colseDialog();
  }
  if (myProgressBar.isShowing()) {
   myProgressBar.colseDialog();
  } 

  super.onBackPressed();
 }

源码:Android实现弹窗进度条

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 七种进度条的样式

    当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行.执行进度如何.应用程序是否遇到错误终止等,这时需要使用进度条来提示用户后台程序执行的进度.Android系统提供了两大类进度条样式,长形进度条(progress-BarStyleHorizontal) 和圆形进度条(progressBarStyleLarge).进度条用处很多,比如,应用程序装载资源和网络连接时,可以提示用户稍等,这一类进度条只是代表应用程序中某一部分的执行情况,而整个应用程序执行情况呢,则可以通

  • Android三种方式实现ProgressBar自定义圆形进度条

    进度条样式在项目中经常可以见到,下面小编给大家分享Android三种方式实现ProgressBar自定义圆形进度条. Android进度条有4种风格可以使用. 默认值是progressBarStyle. 设置成progressBarStyleSmall后,图标变小. 设置成progressBarStyleLarge后,图标变大 设置成progressBarStyleHorizontal后,变成横向长方形. 自定义圆形进度条ProgressBar的一般有三种方式: 一.通过动画实现 定义res/a

  • Android中实现Webview顶部带进度条的方法

    写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下: 主Activity代码: 复制代码 代码如下: package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.vi

  • Android ProgressBar进度条使用详解

    ProgressBar进度条,分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案例大多都是通过Button点击增加.减少进度值,使用方法incrementProgressBy(int),最简单的做法是在xml布局文件中放置ProgressBar空间,然后再MainActivity中触发事件后执行incrementProgressBy(int),代码如下: <LinearLayout xmlns:android="http:/

  • 实例详解Android自定义ProgressDialog进度条对话框的实现

    Android SDK已经提供有进度条组件ProgressDialog组件,但用的时候我们会发现可能风格与我们应用的整体风格不太搭配,而且ProgressDialog的可定制行也不太强,这时就需要我们自定义实现一个ProgressDialog. 通过看源码我们发现,ProgressDialog继承自Alertdialog,有一个ProgressBar和两个TextView组成的,通过对ProgressDialog的源码进行改进就可以实现一个自定义的ProgressDialog. 1.效果: 首先

  • Android文件下载进度条的实现代码

    main.xml: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_paren

  • Android中自定义进度条详解

    Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子 很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如: ok,我们开始吧: 一)变换前背景 先来看看progressbar的属性: 复制代码 代码如下: <ProgressBar             android:id="@+id/progressBar"             style="?android:attr/progressBarStyleHor

  • Android编程之ProgressBar圆形进度条颜色设置方法

    本文实例讲述了Android ProgressBar圆形进度条颜色设置方法.分享给大家供大家参考,具体如下: 你是不是还在为设置进度条的颜色而烦恼呢--别着急,且看如下如何解决. ProgressBar分圆形进度条和水平进度条 我这里就分享下如何设置圆形进度条的颜色吧,希望对大家会有帮助. 源码如下: 布局文件代码: <ProgressBar android:id="@+id/progressbar" android:layout_width="wrap_content

  • android自定义进度条渐变色View的实例代码

    最近在公司,项目不是很忙了,偶尔看见一个兄台在CSDN求助,帮忙要一个自定义的渐变色进度条,我当时看了一下进度条,感觉挺漂亮的,就尝试的去自定义view实现了一个,废话不说,先上图吧! 这个自定义的view,完全脱离了android自带的ProgressView,并且没使用一张图片,这样就能更好的降低程序代码上的耦合性! 下面我贴出代码  ,大概讲解一下实现思路吧! 复制代码 代码如下: package com.spring.progressview; import android.conten

  • android ListView和ProgressBar(进度条控件)的使用方法

    ListView控件的使用:ListView控件里面装的是一行一行的数据,一行中可能有多列,选中一行,则该行的几列都被选中,同时可以触发一个事件,这种控件在平时还是用得很多的.使用ListView时主要是要设置一个适配器,适配器主要是用来放置一些数据.使用起来稍微有些复杂,这里用的是android自带的SimpleAdapter,形式如下:android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<

随机推荐