首页 > 系统 > Android > 正文

Android实现弹窗进度条效果

2019-10-22 18:11:59
字体:
来源:转载
供稿:网友

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实现弹窗进度条

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


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表