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

时间: 2025-01-30 14:32:13

android 自定义progressbar 样式的相关文章

转:android 自定义RadioButton样式

http://gundumw100.iteye.com/blog/1146527  上面这种3选1的效果如何做呢?用代码写? 其实有更简单的办法,忘了RadioButton有什么特性了吗? 我就用RadioButton实现了如上效果,其实很简单的. 首先定义一张background,命名为radio.xml,注意该background必须为xml样式的图片: Xml代码   <?xml version="1.0" encoding="utf-8"?> &

自定义ProgressBar样式

转载注明出处: http://blog.csdn.net/forwardyzk/article/details/42609491 我们使用的进度条多种多样,下面有几种自定义的进度条的样式,下面介绍几个. 进度条的有基本的四种样式: 默认风格的进度条: android:progressBarStyle 水平长型进度条: android:progressBarStyleHorizontal 大圆形进度条: android:progressBarStyleLarge 小圆形进度条: android:p

Android中ProgressBar样式

Android系统已经被各大厂商改的面目全非,各种系统组件在不同手机上显示的效果完全不同,现在要想在开发中想要保持统一的界面风格,必须全部修改系统组件的样式,现在我们需要修改系统默认的ProgressBar,就Android系统本身来说,不同的版本组件的样式也不同. 系统中ProgressBar样式 找到android-sdk目录下的platforms\android-15\data\res\values中的styles.xml,然后查找ProgressBar,可以发现 <style name=

android自定义progressBar

1,在anim文件夹中新建一个动画 <?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_progress" android:pivotX="50.0%"

#Android 自定义字体样式

Android中自定义字体设置一般通过 facetype属性进行设置,先看一下官网提供的方法 顾名思义 就是说我们可以通过使用项目中assets文件下的资产文件或者是android本身的系统文件进行字体设置. 如果使用assets方法的话,首先我们需要在项目路径下创建assets文件夹, 如图所示,设置好文件之后,可以使用 Typeface typeface1 = Typeface.createFromAsset(this.getAssets(),"fonts/1.TTF"); tvT

Android 自定义RadioButton样式

 上面这种3选1的效果如何做呢?用代码写? 其实有更简单的办法,忘了RadioButton有什么特性了吗? 我就用RadioButton实现了如上效果,其实很简单的. 首先定义一张background,命名为radio.xml,注意该background必须为xml样式的图片: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.an

Android -- 自定义ProgressBar图片

注:所有的进度条都要配置 android:indeterminate="false"        android:indeterminateDrawable="样式文件名称" 1.  图片旋转 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/an

android 自定义progressBar

//[使用progressBar] <ProgressBar android:id="@+id/level_progressBar1" style="@style/Widget.Holo.Light.orange_ProgressBar.Horizontal" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_

android自定义radiobutton样式文字颜色随选中状态而改变

主要是写一个 color selector 在res/建一个文件夹取名color res/color/color_radiobutton.xml 1 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:state_checked="true" android:color="@color/color_text_select