当前位置: 移动技术网 > IT编程>移动开发>Android > Android倒计时功能的实现代码

Android倒计时功能的实现代码

2020年03月09日  | 移动技术网IT编程  | 我要评论

交通大学bbs,薛璐下载,alp

好久没有写博客了,趁着年末,总结了下最近一年所遇到的一些技术问题,还有一些自定义控件,比如倒计时功能

首先倒计时的实现方式

1.handler
2.timer
3.rxjava
4.valueanimator
5.其他

这些方式中,我选择了valueanimator,主要是它的api比较友好,不需要我们去封装太多东西,具体的使用方式我就不单独写了,下面的代码都有备注

项目地址

项目图片

代码实现:

package com.example.countdownview;
import android.animation.animator;
import android.animation.animatorlisteneradapter;
import android.animation.valueanimator;
import android.content.context;
import android.content.res.typedarray;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
import android.graphics.rectf;
import android.util.attributeset;
import android.view.view;
import android.view.animation.linearinterpolator;
public class countdownview extends view {
  //圆轮颜色
  private int mringcolor;
  //圆轮宽度
  private float mringwidth;
  //宽度
  private int mwidth;
  //高度
  private int mheight;
  private paint mpaint;
  //圆环的矩形区域
  private rectf mrectf;
  //
  private int mcountdowntime;
  private float mcurrentprogress;
  private oncountdownfinishlistener mlistener;
  valueanimator valueanimator;
  public countdownview(context context) {
    this(context, null);
  }
  public countdownview(context context, attributeset attrs) {
    this(context, attrs, 0);
  }
  public countdownview(context context, attributeset attrs, int defstyleattr) {
    super(context, attrs, defstyleattr);
    typedarray a = 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 = new paint(paint.anti_alias_flag);
    /**
     *圆环
     */
    //颜色
    mpaint.setcolor(mringcolor);
    //空心
    mpaint.setstyle(paint.style.stroke);
    mpaint.setantialias(true); // 消除锯齿
    //宽度
    mpaint.setstrokewidth(mringwidth);
  }
  public void setcountdowntime(int mcountdowntime) {
    this.mcountdowntime = mcountdowntime;
  }
  @override
  protected void onlayout(boolean changed, int left, int top, int right, int bottom) {
    super.onlayout(changed, left, top, right, bottom);
    mwidth = getmeasuredwidth();
    mheight = getmeasuredheight();
    mrectf = new rectf(0 + mringwidth / 2, 0 + mringwidth / 2,
        mwidth - mringwidth / 2, mheight - mringwidth / 2);
  }
  @override
  protected void ondraw(canvas canvas) {
    super.ondraw(canvas);
    canvas.drawarc(mrectf, -90, mcurrentprogress, false, mpaint);
  }
  private valueanimator getvala(long countdowntime) {
    valueanimator valueanimator = valueanimator.offloat(0, 100);
    valueanimator.setduration(countdowntime);
    valueanimator.setinterpolator(new linearinterpolator());
    valueanimator.setrepeatcount(0);
    return valueanimator;
  }
  /**
   * 开始倒计时
   */
  public void startcountdown() {
    setclickable(false);
    valueanimator = getvala(mcountdowntime * 1000);
    //状态更新监听
    valueanimator.addupdatelistener(new valueanimator.animatorupdatelistener() {
      @override
      public void onanimationupdate(valueanimator animation) {
        float i = float.valueof(string.valueof(animation.getanimatedvalue()));
        mcurrentprogress = (int) (360 * (i / 100f));
        invalidate();
      }
    });
    valueanimator.start();
    //状态变化结束监听
    valueanimator.addlistener(new animatorlisteneradapter() {
      @override
      public void onanimationend(animator animation) {
        super.onanimationend(animation);
        //倒计时结束回调
        if (mlistener != null) {
          mlistener.countdownfinished();
        }
        setclickable(true);
      }
    });
  }
  /**
   * 恢复
   */
  public void resumecountdown(){
    if (valueanimator!=null){
      valueanimator.resume();
    }
  }
  /**
   * 暂停
   */
  public void pausecountdown(){
    if (valueanimator!=null){
        valueanimator.pause();
    }
  }
  /**
   * 停止倒计时
   */
  public void stopcountdown(){
    if (valueanimator!=null){
      valueanimator.cancel();
    }
  }
  public void setcountdownfinishlistener(oncountdownfinishlistener mlistener) {
    this.mlistener = mlistener;
  }
  public interface oncountdownfinishlistener {
    void countdownfinished();
  }
}

总结

以上所述是小编给大家介绍的android倒计时功能的实现代码,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网