怎么在Android中利用ProgressButton实现进度条按钮

  介绍

这期内容当中小编将会给大家带来有关怎么在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实现进度条按钮