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