现在的位置: 首页 > 综合 > 正文

Android自定义弹窗进度条

2018年01月10日 ⁄ 综合 ⁄ 共 4696字 ⁄ 字号 评论关闭

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();
	}

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

效果:

抱歉!评论已关闭.