介绍
这期内容当中小编将会给大家带来有关怎么在Android中利用ProgressButton实现进度条按钮,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
创建三个GradientDrawable作为按钮背景,进度条背景和进度条前景,通过计算进度条的百分比来设置宽度,然后调用invalidate()重绘.GradientDrawable设置颜色,圆角等参数,当然你也可以直接加载xml作为背景。
3。自定义参数:
在价值观目录建一个attrs。xml文件
, & lt; ? xml version=案删?编码=皍tf产生绯闻;?比; ,& lt; resources> & lt;才能attr name=皃rogressColor",格式=癱olor",/比; & lt;才能attr name=皃rogressBackColor",格式=癱olor",/比; & lt;才能attr name=皃rogress",格式=癷nteger",/比; & lt;才能attr name=癿inProgress",格式=癷nteger",/比; & lt;才能attr name=癿axProgress",格式=癷nteger",/比; & lt;才能declare-styleable name=癙rogressButton"比; ,,& lt; attr name=皃rogressColor",/比; ,,& lt; attr name=皃rogressBackColor",/比; ,,& lt; attr name=癰uttonColor",格式=癱olor",/比; ,,& lt; attr name=癱ornerRadius",格式=癲imension",/比; ,,& lt; attr name=皃rogress",/比; ,,& lt; attr name=癿inProgress",/比; ,,& lt; attr name=癿axProgress",/比; ,,& lt; attr name=皃rogressMargin",格式=癲imension",/比; & lt;才能/declare-styleable> ,& lt;/resources>
3。按钮类:
在setProgress方法中改变mProgress的值,然后调用invalidate()重绘,因为我这里定义了一个minProgress(默认为0),所以在计算进度条宽度的时候,当前进度和最大进度都要先减去minProgress再做除法。
if (progressWidth & lt;, mCornerRadius *, 2), {=,,progressWidth  mCornerRadius *, 2; }
当进度条宽度小于2倍圆角半径的时候,进度条的圆角就和背景的圆角不一致,所以加上了上面这段代码。
获取宽度和高度其实用getWidth()和获得()也可以,只不过在设计器中没法看到效果,所以我用了getMeasuredWidth()和getMeasuredHeight ()。
, package com.cloud.customviews; ,import android.content.Context; ,import android.content.res.TypedArray; ,import android.graphics.Canvas; ,import android.graphics.drawable.GradientDrawable; ,import android.support.v.widget.AppCompatButton; ,import android.util.AttributeSet; ,public class  ProgressButton extends  AppCompatButton { private 才能float mCornerRadius =,; private 才能float mProgressMargin =,; private 才能;boolean  mFinish; private 才能;int  mProgress; private 才能int mMaxProgress =,; private 才能int mMinProgress =,; private 才能;GradientDrawable  mDrawableButton; private 才能;GradientDrawable  mDrawableProgressBackground; private 才能;GradientDrawable  mDrawableProgress; public 才能;ProgressButton (Context 上下文,AttributeSet attrs), { ,,超级(上下文,attrs); ,,初始化(上下文,attrs); ,,} public 才能;ProgressButton (Context 上下文,AttributeSet attrs,, int defStyle), { ,,超级(上下文,attrs,, defStyle); ,,初始化(上下文,attrs); ,,} private 才能;void 初始化(Context 上下文,AttributeSet attrs), { ,,//Progress background 可拉的 ,,mDrawableProgressBackground =, new GradientDrawable (); ,,//Progress 可拉的 ,,mDrawableProgress =, new GradientDrawable (); ,,//Normal 可拉的 ,,mDrawableButton =, new GradientDrawable (); ,,//Get default normal 颜色 ,,int defaultButtonColor =, getresource () .getColor (R.color.colorGray, null); ,,//Get default progress 颜色 ,,int defaultProgressColor =, getresource () .getColor (R.color.colorGreen, null); ,,//Get default progress background 颜色 ,,int defaultBackColor =, getresource () .getColor (R.color.colorGray, null); ,,TypedArray attr =, context.obtainStyledAttributes (R.styleable.ProgressButton attrs也); ,,try { ,,,mProgressMargin =, attr.getDimension (mProgressMargin R.styleable.ProgressButton_progressMargin也); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在Android中利用ProgressButton实现进度条按钮