android 圆环温度控件,android 圆环倒计时控件

public classCountDownView extendsView {

//圆环颜色private intmRingColor;//圆环宽度private floatmRingWidth;//圆环进度值文本大小private intmRingProgessTextSize;//宽度private intmWidth;//高度private intmHeight;privatePaint mPaint;//圆环的矩形区域privateRectF mRectF;//private intmProgessTextColor;private intmCountdownTime;private floatmCurrentProgress;ValueAnimator valueAnimator;/*** 监听事件*/privateOnCountDownListener mListener;publicCountDownView(Context context) {

this(context, null);}

publicCountDownView(Context context,@NullableAttributeSet attrs) {

this(context,attrs,0);}

publicCountDownView(Context context,@NullableAttributeSet attrs, intdefStyleAttr) {

super(context,attrs,defStyleAttr);// init();/*** 获取相关属性值*/TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.CountDownView);mRingColor= typedArray.getColor(R.styleable.CountDownView_ringColor,context.getResources().getColor(R.color.colorAccent));mRingWidth= typedArray.getFloat(R.styleable.CountDownView_ringWidth,40);mRingProgessTextSize= typedArray.getDimensionPixelSize(R.styleable.CountDownView_progressTextSize,20);mProgessTextColor= typedArray.getColor(R.styleable.CountDownView_progressTextColor,context.getResources().getColor(R.color.colorAccent));mCountdownTime= typedArray.getInteger(R.styleable.CountDownView_countdownTime,60);typedArray.recycle();mPaint= newPaint(Paint.ANTI_ALIAS_FLAG);mPaint.setAntiAlias(true);this.setWillNotDraw(false);}

@Overrideprotected voidonLayout(booleanchanged, intleft, inttop, intright, intbottom) {

super.onLayout(changed,left,top,right,bottom);mWidth= getMeasuredWidth();mHeight= getMeasuredHeight();mRectF= newRectF(0+ mRingWidth/ 2,0+ mRingWidth/ 2,mWidth- mRingWidth/ 2,mHeight- mRingWidth/ 2);}

/*** 设置倒计时间 单位秒*@parammCountdownTime*/public voidsetCountdownTime(intmCountdownTime) {

this.mCountdownTime= mCountdownTime;invalidate();}

// public CountDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {// super(context, attrs, defStyleAttr, defStyleRes);// }/*** 动画*@paramcountdownTime*@return*/privateValueAnimator getValueAnimator(longcountdownTime) {

ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,100);valueAnimator.setDuration(countdownTime);valueAnimator.setInterpolator(newLinearInterpolator());valueAnimator.setRepeatCount(0);returnvalueAnimator;}

@Overrideprotected voidonDraw(Canvas canvas) {

super.onDraw(canvas);/***圆环*///颜色mPaint.setColor(mRingColor);//空心mPaint.setStyle(Paint.Style.STROKE);//宽度mPaint.setStrokeWidth(mRingWidth);canvas.drawArc(mRectF,-90,mCurrentProgress- 360, false,mPaint);//绘制文本Paint textPaint = newPaint();textPaint.setAntiAlias(true);textPaint.setTextAlign(Paint.Align.CENTER);String text = mCountdownTime- (int) (mCurrentProgress/ 360f* mCountdownTime) + "";textPaint.setTextSize(mRingProgessTextSize);textPaint.setColor(mProgessTextColor);//文字居中显示Paint.FontMetricsInt fontMetrics = textPaint.getFontMetricsInt();intbaseline = (int) ((mRectF.bottom+ mRectF.top- fontMetrics.bottom- fontMetrics.top) / 2);canvas.drawText(text,mRectF.centerX(),baseline,textPaint);}

/*** 开始倒计时*/public voidstartCountDown() {

valueAnimator= getValueAnimator(mCountdownTime* 1000);valueAnimator.addUpdateListener(newValueAnimator.AnimatorUpdateListener() {

@Overridepublic voidonAnimationUpdate(ValueAnimator animation) {

floati = Float.valueOf(String.valueOf(animation.getAnimatedValue()));mCurrentProgress= (int) (360* (i / 100f));invalidate();}

});valueAnimator.start();valueAnimator.addListener(newAnimatorListenerAdapter() {

@Overridepublic voidonAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);//倒计时结束回调if(mListener!= null) {

mListener.countDownFinished();}

}

});}

/*** 停止倒计时*/public voidstopCountDdwn(){

valueAnimator.cancel();}

public voidsetOnCountDownListener(OnCountDownListener mListener) {

this.mListener= mListener;}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值