中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

Android中如何實現倒計時功能

本篇文章給大家分享的是有關Android中如何實現倒計時功能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

羅莊網站建設公司成都創新互聯,羅莊網站設計制作,有大型網站制作公司豐富經驗。已為羅莊上千多家提供企業網站建設服務。企業網站搭建\外貿營銷網站建設要多少錢,請找那個售后服務好的羅莊做網站的公司定做!

1.Handler2.Timer3.RxJava4.ValueAnimator5.其他

這些方式中,我選擇了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中如何實現倒計時功能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。

網頁題目:Android中如何實現倒計時功能
標題URL:http://www.2m8n56k.cn/article16/gseggg.html

成都網站建設公司_創新互聯,為您提供標簽優化動態網站定制開發虛擬主機自適應網站品牌網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營
主站蜘蛛池模板: www.成人在线视频 | 免费看久久 | 美女扒开腿让男生桶爽网站 | 欧美一区视频在线 | 国产永久精品 | 99久久国产综合精品成人影院 | 亚洲深夜视频 | 欧美日韩国产片 | 日本农村寡妇一级毛片 | 国产a国产片 | 亚洲精品亚洲人成在线麻豆 | 99免费观看视频 | 精品无码久久久久国产 | 久草在线免费看 | 欧美xxxx色视频在线观看 | 成人午夜影视全部免费看 | 亚洲第一影院 | 91热国产| 久久思思爱 | 欧美一级毛片特黄黄 | 一级女性全黄生活片免费 | 理论视频在线观看 | 国产成人一区在线播放 | 国产精品国产三级国产a | 久久久久久免费一区二区三区 | 国产麻豆交换夫妇 | 日本亚洲成高清一区二区三区 | 亚洲精品在线影院 | 中文字幕一区二区在线播放 | 国产精品视频久久久久久 | 久久久久久91香蕉国产 | 一级片视频免费观看 | 白云精品视频国产专区 | 欧美精品伊人久久 | 久久国产精品高清一区二区三区 | 久久精品国产99国产精品亚洲 | 免费高清特级毛片 | 久草国产视频 | 五月天婷婷伊人 | 国产91精选在线观看网站 | 国产深夜福利视频在线播放 |