android 自定义progressbar 样式

在res下创建drawable文件夹,新建文件drawable/progressbar_color.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- 背景  gradient是渐变,corners定义的是圆角 -->
    <item android:id="@android:id/background"
        android:layout_width="wrap_content">
        <shape>
            <corners android:radius="10dp" />

            <solid android:color="#ffffff" />
        </shape>
    </item>
    <!-- 第二条进度条颜色 -->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="10dp" />

                <gradient
                    android:angle="90.0"
                    android:centerColor="#aadfdf"
                    android:centerY="0.45"
                    android:endColor="#aadfdf"
                    android:startColor="#aadfdf" />
            </shape>
        </clip>
    </item>
    <!-- 进度条 -->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="10dp" />
                <solid android:color="#00a8a7" />
            </shape>
        </clip>
    </item>

</layer-list>

progressBar style

style="?android:attr/progressBarStyleHorizontal"

 

<ProgressBar 
        android:id="@+id/my_progress"
        android:layout_width="match_parent"
        android:layout_height="12dp"
        android:max="100"
        android:progress="40"
        android:secondaryProgress="70"
        style="?android:attr/progressBarStyleHorizontal"
        android:progressDrawable="@drawable/progressbar_color"/>

 

dialog自定义样式XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="vertical"
        android:background="@drawable/bar">
        <TextView
            android:id="@+id/progress_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="44px"
            android:text="download"
            android:layout_marginTop="113px"
            android:layout_gravity="center"
            android:textColor="#282828"
            />

        <ProgressBar
            android:id="@+id/progress"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="300dp"
            android:layout_height="18dp"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="15dp"
            android:layout_centerHorizontal="true"
            android:progressDrawable="@drawable/bar"
            android:secondaryProgress="100"
        />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            >
            <TextView
                android:id="@+id/progress_percent"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:textSize="30px"
                android:layout_marginTop="5dp"
                android:layout_marginLeft="15dp"

                android:textColor="#282828"
                />
            <TextView
                android:id="@+id/progress_number"
                android:layout_width="250px"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:layout_marginLeft="100dp"
                android:textSize="30px"
                android:gravity="center_horizontal"
                android:textColor="#282828"
                />
        </LinearLayout>
    </LinearLayout>




</LinearLayout>

 

 

CommonProgressDialog.java类:

package buzz.things.prigressdialog;

import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.StyleSpan;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.text.NumberFormat;

/**
 * Created by buzz on 2015/6/12.
 */
public class CommonProgressDialog extends AlertDialog {


    private ProgressBar mProgress;
    private TextView mProgressNumber;
    private TextView mProgressPercent;
    private TextView mProgressMessage;

    private Handler mViewUpdateHandler;
    private int mMax;
    private CharSequence mMessage;
    private boolean mHasStarted;
    private int mProgressVal;

    private String TAG="CommonProgressDialog";
    private String mProgressNumberFormat;
    private NumberFormat mProgressPercentFormat;
    public CommonProgressDialog(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        initFormats();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress_bar_sweet);
        mProgress=(ProgressBar) findViewById(R.id.progress);
        mProgressNumber=(TextView) findViewById(R.id.progress_number);
        mProgressPercent=(TextView) findViewById(R.id.progress_percent);
        mProgressMessage=(TextView) findViewById(R.id.progress_message);
//      LayoutInflater inflater = LayoutInflater.from(getContext());
        mViewUpdateHandler = new Handler() {


            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                super.handleMessage(msg);
                int progress = mProgress.getProgress();
                int max = mProgress.getMax();
                double dProgress = (double)progress/(double)(1024 * 1024);
                double dMax = (double)max/(double)(1024 * 1024);
                if (mProgressNumberFormat != null) {
                    String format = mProgressNumberFormat;
                    mProgressNumber.setText(String.format(format, dProgress, dMax));
                } else {
                    mProgressNumber.setText("");
                }
                if (mProgressPercentFormat != null) {
                    double percent = (double) progress / (double) max;
                    SpannableString tmp = new SpannableString(mProgressPercentFormat.format(percent));
                    tmp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD),
                            0, tmp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    mProgressPercent.setText(tmp);
                } else {
                    mProgressPercent.setText("");
                }
            }

        };
//      View view = inflater.inflate(R.layout.common_progress_dialog, null);
//        mProgress = (ProgressBar) view.findViewById(R.id.progress);
//        mProgressNumber = (TextView) view.findViewById(R.id.progress_number);
//        mProgressPercent = (TextView) view.findViewById(R.id.progress_percent);
//        setView(view);
        //mProgress.setMax(100);
        onProgressChanged();
        if (mMessage != null) {
            setMessage(mMessage);
        }
        if (mMax > 0) {
            setMax(mMax);
        }
        if (mProgressVal > 0) {
            setProgress(mProgressVal);
        }
    }
    private void initFormats() {
        mProgressNumberFormat = "%1.2fM/%2.2fM";
        mProgressPercentFormat = NumberFormat.getPercentInstance();
        mProgressPercentFormat.setMaximumFractionDigits(0);
    }
    private void onProgressChanged() {
        mViewUpdateHandler.sendEmptyMessage(0);


    }
    public void setProgressStyle(int style) {
        //mProgressStyle = style;
    }
    public int getMax() {
        if (mProgress != null) {
            return mProgress.getMax();
        }
        return mMax;
    }
    public void setMax(int max) {
        if (mProgress != null) {
            mProgress.setMax(max);
            onProgressChanged();
        } else {
            mMax = max;
        }
    }
    public void setIndeterminate(boolean indeterminate) {
        if (mProgress != null) {
            mProgress.setIndeterminate(indeterminate);
        }
//      else {
//            mIndeterminate = indeterminate;
//        }
    }
    public void setProgress(int value) {
        if (mHasStarted) {
            mProgress.setProgress(value);
            onProgressChanged();
        } else {
            mProgressVal = value;
        }
    }


    @Override
    public void setMessage(CharSequence message) {
        // TODO Auto-generated method stub
        //super.setMessage(message);
        if(mProgressMessage!=null){
            mProgressMessage.setText(message);
        }
        else{
            mMessage = message;
        }
    }


    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        mHasStarted = true;
    }


    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        mHasStarted = false;
    }

}

测试程序:

private void showDialog(){  
    mDialog = new CommonProgressDialog(this);  
      
    mDialog.setMessage("正在下载");  
    mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
    mDialog.setOnCancelListener(new OnCancelListener() {  
          
        @Override  
        public void onCancel(DialogInterface dialog) {  
            // TODO Auto-generated method stub  
            //cancel(true);  
        }  
    });  
    mDialog.show();  
      
    mDialog.setMax(100*1024*1024);  
    mDialog.setProgress(65*1024*1024);  
}  

 

 

效果图

ref:http://blog.csdn.net/heqiangflytosky/article/details/21176943?utm_source=tuicool

ref:http://blog.csdn.net/qjlhlh/article/details/7979179

 

posted @ 2015-06-12 18:26  Stuart001  阅读(5696)  评论(0编辑  收藏  举报