Android倒计时功能的实现代码
好久没有写博客了,趁着年末,总结了下最近一年所遇到的一些技术问题,还有一些自定义控件,比如倒计时功能
首先倒计时的实现方式
1.Handler
2.Timer
3.RxJava
4.ValueAnimator
5.其他
这些方式中,我选择了ValueAnimator,主要是它的API比较友好,不需要我们去封装太多东西,具体的使用方式我就不单独写了,下面的代码都有备注
项目地址
项目图片
代码实现:
packagecom.example.countdownview; importandroid.animation.Animator; importandroid.animation.AnimatorListenerAdapter; importandroid.animation.ValueAnimator; importandroid.content.Context; importandroid.content.res.TypedArray; importandroid.graphics.Canvas; importandroid.graphics.Color; importandroid.graphics.Paint; importandroid.graphics.RectF; importandroid.util.AttributeSet; importandroid.view.View; importandroid.view.animation.LinearInterpolator; publicclassCountDownViewextendsView{ //圆轮颜色 privateintmRingColor; //圆轮宽度 privatefloatmRingWidth; //宽度 privateintmWidth; //高度 privateintmHeight; privatePaintmPaint; //圆环的矩形区域 privateRectFmRectF; // privateintmCountdownTime; privatefloatmCurrentProgress; privateOnCountDownFinishListenermListener; ValueAnimatorvalueAnimator; publicCountDownView(Contextcontext){ this(context,null); } publicCountDownView(Contextcontext,AttributeSetattrs){ this(context,attrs,0); } publicCountDownView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.CountDownView); mRingColor=a.getColor(R.styleable.CountDownView_ringColor,Color.RED); mCountdownTime=a.getInteger(R.styleable.CountDownView_countdownTime,10); mRingWidth=a.getDimension(R.styleable.CountDownView_ringWidth,2); a.recycle(); mPaint=newPaint(Paint.ANTI_ALIAS_FLAG); /** *圆环 */ //颜色 mPaint.setColor(mRingColor); //空心 mPaint.setStyle(Paint.Style.STROKE); mPaint.setAntiAlias(true);//消除锯齿 //宽度 mPaint.setStrokeWidth(mRingWidth); } publicvoidsetCountdownTime(intmCountdownTime){ this.mCountdownTime=mCountdownTime; } @Override protectedvoidonLayout(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); } @Override protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); canvas.drawArc(mRectF,-90,mCurrentProgress,false,mPaint); } privateValueAnimatorgetValA(longcountdownTime){ ValueAnimatorvalueAnimator=ValueAnimator.ofFloat(0,100); valueAnimator.setDuration(countdownTime); valueAnimator.setInterpolator(newLinearInterpolator()); valueAnimator.setRepeatCount(0); returnvalueAnimator; } /** *开始倒计时 */ publicvoidstartCountDown(){ setClickable(false); valueAnimator=getValA(mCountdownTime*1000); //状态更新监听 valueAnimator.addUpdateListener(newValueAnimator.AnimatorUpdateListener(){ @Override publicvoidonAnimationUpdate(ValueAnimatoranimation){ floati=Float.valueOf(String.valueOf(animation.getAnimatedValue())); mCurrentProgress=(int)(360*(i/100f)); invalidate(); } }); valueAnimator.start(); //状态变化结束监听 valueAnimator.addListener(newAnimatorListenerAdapter(){ @Override publicvoidonAnimationEnd(Animatoranimation){ super.onAnimationEnd(animation); //倒计时结束回调 if(mListener!=null){ mListener.countDownFinished(); } setClickable(true); } }); } /** *恢复 */ publicvoidresumeCountDown(){ if(valueAnimator!=null){ valueAnimator.resume(); } } /** *暂停 */ publicvoidpauseCountDown(){ if(valueAnimator!=null){ valueAnimator.pause(); } } /** *停止倒计时 */ publicvoidstopCountDown(){ if(valueAnimator!=null){ valueAnimator.cancel(); } } publicvoidsetCountDownFinishListener(OnCountDownFinishListenermListener){ this.mListener=mListener; } publicinterfaceOnCountDownFinishListener{ voidcountDownFinished(); } }
总结
以上所述是小编给大家介绍的Android倒计时功能的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。