码迷,mamicode.com
首页 > 其他好文 > 详细

自定义Button成进度条

时间:2016-11-27 17:05:09      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:measure   stat   extends   can   int   dmi   min   etc   asynctask   

ProgressButton源码:

package com.example.progressbutton;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.Button;

/**
 * @author  Administrator
 * @time     2015-7-19 下午4:41:06
 * @des    TODO
 *
 * @version $Rev$
 * @updateAuthor $Author$
 * @updateDate $Date$
 * @updateDes TODO
 */
public class ProgressButton extends Button {
    private boolean        mProgressEnable;
    private long        mMax    = 100;
    private long        mProgress;
    private Drawable    mProgressDrawable;

    /**设置是否允许进度*/
    public void setProgressEnable(boolean progressEnable) {
        mProgressEnable = progressEnable;
    }

    /**设置进度的最大值*/
    public void setMax(long max) {
        mMax = max;
    }

    /**设置当前的进度,并且进行重绘操作*/
    public void setProgress(long progress) {
        mProgress = progress;
        invalidate();
    }

    /**设置progressButton的进度图片*/
    public void setProgressDrawable(Drawable progressDrawable) {
        mProgressDrawable = progressDrawable;
    }

    public ProgressButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ProgressButton(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (mProgressEnable) {
            Drawable drawable = new ColorDrawable(Color.BLUE);
            int left = 0;
            int top = 0;
            int right = (int) (mProgress * 1.0f / mMax * getMeasuredWidth() + .5f);
            int bottom = getBottom();
            drawable.setBounds(left, top, right, bottom);// 必须的.告知绘制的范围
            drawable.draw(canvas);
        }

        super.onDraw(canvas);// 绘制文本,还会绘制背景
    }
}

控制显示Demo:

package com.example.progressbutton;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(final View view) {

        new AsyncTask<Void, Integer, Void>() {
            int progress=0;
            private ProgressButton mButton;
            @Override
            protected void onPreExecute() {
                mButton = (ProgressButton) view;
                mButton.setProgressEnable(true);
            }

            @Override
            protected Void doInBackground(Void... params) {
                for (int i = 0; i <= 100; i++) {
                    SystemClock.sleep(100);
                    publishProgress(i);
                }
                return null;
            }

            @Override
            protected void onProgressUpdate(Integer... values) {
                mButton.setProgress(values[0]);
                mButton.setText(values[0]+"%");
            }

            protected void onPostExecute(Void result) {

            };

        }.execute();

    }

}

效果图:

技术分享

 

自定义Button成进度条

标签:measure   stat   extends   can   int   dmi   min   etc   asynctask   

原文地址:http://www.cnblogs.com/tinyclear/p/6106511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!