Android自定義彈窗進度條

Android自定義進度條主要是修改ProgressBar的style,彈窗則是在Dialog裡顯示ProgressBar。

直接上代碼。

        在style.xml裡加入如下代碼:

[html]  

<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>  

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

[html]  

<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的內容如下:

[html]  

<?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的內容如下:

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

        }  

    };  

}  

 

調用代碼如下:

[java]  

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

            }  

              

  

  

        }  

  

  

    };  

 

按返回退出:

[java]  

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

    }  

 

效果:

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *