欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Android自定义弹窗进度条

来源: 开发者 投稿于  被查看 38842 次 评论:9

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

相关文章

    暂无相关文章

用户评论