zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    EditorWindow 和MenuItem
    PropertyDrawer 自定义属性绘图
    NGUI3.5系列教程之 一些小功能的实现
    NGUI3.5系列教程之 UILabel
    关于Resources.LoadAssetAtPath
    C#调用Python 脚本语言
    unity项目实现“再按一次退出程序”提示功能
    在Visual Studio 2010 中创建类库(dll)
    Unity 优化
    JAVA package-info文件【转】
  • 原文地址:https://www.cnblogs.com/stuart/p/4572340.html
Copyright © 2011-2022 走看看