- 应用场景: 点击下载的时候,按钮有进度条的显示.
- 使用到的东西:
- 自定义控件
- Handler
- butterknife(很方便findViewById)
- 先看效果图
![动态图](https://img-blog.csdn.net/20161207103106055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hiMTk5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- 下面上代码
public class ProgressBtn extends Button {
private boolean isProgressEnable = true;
private long mMax = 100;
private long mProgress;
private ColorDrawable mBlueBg;
/***
* 是否允许进度
*
* @param isProgressEnable
*/
public void setIsProgressEnable(boolean isProgressEnable) {
this.isProgressEnable = isProgressEnable;
}
/**
* 设置进度的最大值
*
* @param max
*/
public void setMax(long max) {
mMax = max;
}
/**
* 设置进度的当前值
*
* @param progress
*/
public void setProgress(long progress) {
mProgress = progress;
invalidate();
}
public ProgressBtn(Context context) {
super(context);
}
public ProgressBtn(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
if (isProgressEnable) {
if (mBlueBg == null) {
mBlueBg = new ColorDrawable(Color.BLUE);
}
int left = 0;
int top = 0;
int right = (int) (mProgress * 1.0f / mMax * getMeasuredWidth() + .5f);
int bottom = getBottom();
mBlueBg.setBounds(left, top, right, bottom);
mBlueBg.draw(canvas);
}
super.onDraw(canvas);
}
}
- 下面主界面的测试代码,我是用handler 模拟的
public class MainActivity extends AppCompatActivity {
private static final int PROGRESS_UPDATE = 0;
private static final int END = 1;
private MTask mTask;
@Bind(R.id.btn_progress)
ProgressBtn btnProgress;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case PROGRESS_UPDATE:
int i = (int) msg.obj;
btnProgress.setProgress(i);
int index = (int) (i * 1.0f / 100 * 100 + .5f);
btnProgress.setText(index + "%");
if (i == 100) {
btnProgress.setText("下载完成");
btnProgress.setTextColor(Color.BLACK);
btnProgress.setProgress(0);
mTask = null;
}
break;
case END:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
btnProgress.setMax(100);
}
@OnClick(R.id.btn_progress)
public void onClick() {
if (mTask == null) {
mTask = new MTask();
new Thread(mTask).start();
}
}
class MTask implements Runnable {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
SystemClock.sleep(100);
Message msg = Message.obtain();
msg.what = PROGRESS_UPDATE;
msg.obj = i;
mHandler.sendMessage(msg);
}
}
}
}
- 需要改进的地方 , 没有暂停按钮,还不实用,
- 没有自定义属性,设置不方便