Android自定义弹窗进度条

来源:互联网 发布:新手淘宝开店教程视频 编辑:程序博客网 时间:2024/03/29 02:46

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 stubthis.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() {@Overridepublic void onCancel(DialogInterface dialog) {// TODO Auto-generated method stubdialog.dismiss();}};}

调用代码如下:

MyProgressBar myProgressBar;myProgressBar = new MyProgressBar(Dialog_TestActivity.this);myProgressBar.initDialog();new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {Thread.sleep(200);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}for (int i = 0; i < 100; i++) {handler.sendEmptyMessage(0);try {Thread.sleep(30);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}).start();Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// 改变ProgressBar的当前值myProgressBar.setProgress(intCounter++);if (intCounter == 100) {intCounter = 0;myProgressBar.colseDialog();}}};

按返回退出:

@Overridepublic void onBackPressed() {// TODO Auto-generated method stubLog.d("11", "onBackPressed()");if (myProgressDialog.isShowing()) {myProgressDialog.colseDialog();}if (myProgressBar.isShowing()) {myProgressBar.colseDialog();}super.onBackPressed();}

源码:http://download.csdn.net/detail/viviwen123/5162504

效果:





原创粉丝点击