Android利用Chronometer实现倒计时功能

项目需要实现一个计时的功能,利用Chronometer虽然可以很方便的实现计时功能,但需要的却是一个倒计时控件。

百度了一下方法不少,倒计时的却没有,于是用Chronometer封装了一个倒计时的类,本着开源的精神,分享给大家!

废话不说了,进入主题

首先xml布局如下:

<com.example.anticlockwisedemo.Anticlockwise
 android:id="@+id/id_timer"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textSize="66sp" />

继承Chronometer封装好的类:

package com.example.anticlockwisedemo; 

import java.text.SimpleDateFormat;
import java.util.Date;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.Chronometer; 

/***
 *
 * @author 张小_懒 2015/02/07
 *
 */
@SuppressLint(
{ "ViewConstructor", "SimpleDateFormat" })
public class Anticlockwise extends Chronometer
{
 public Anticlockwise(Context context, AttributeSet attrs)
 {
 super(context, attrs);
 // TODO 自动生成的构造函数存根
 mTimeFormat = new SimpleDateFormat("mm:ss");
 this.setOnChronometerTickListener(listener);
 } 

 private long mTime;
 private long mNextTime;
 private OnTimeCompleteListener mListener;
 private SimpleDateFormat mTimeFormat; 

 public Anticlockwise(Context context)
 {
 super(context); 

 } 

 /**
 * 重新启动计时
 */
 public void reStart(long _time_s)
 {
 if (_time_s == -1)
 {
 mNextTime = mTime;
 } else
 {
 mTime = mNextTime = _time_s;
 }
 this.start();
 } 

 public void reStart()
 {
 reStart(-1);
 } 

 /**
 * 继续计时
 */
 public void onResume()
 {
 this.start();
 } 

 /**
 * 暂停计时
 */
 public void onPause()
 {
 this.stop();
 } 

 /**
 * 设置时间格式
 *
 * @param pattern
 * 计时格式
 */
 public void setTimeFormat(String pattern)
 {
 mTimeFormat = new SimpleDateFormat(pattern);
 } 

 public void setOnTimeCompleteListener(OnTimeCompleteListener l)
 {
 mListener = l;
 } 

 OnChronometerTickListener listener = new OnChronometerTickListener()
 {
 @Override
 public void onChronometerTick(Chronometer chronometer)
 {
 if (mNextTime <= 0)
 {
 if (mNextTime == 0)
 {
 Anticlockwise.this.stop();
 if (null != mListener)
 mListener.onTimeComplete();
 }
 mNextTime = 0;
 updateTimeText();
 return;
 } 

 mNextTime--; 

 updateTimeText();
 }
 }; 

 /**
 * 初始化时间
 * @param _time_s
 */
 public void initTime(long _time_s)
 {
 mTime = mNextTime = _time_s;
 updateTimeText();
 } 

 private void updateTimeText()
 {
 this.setText(mTimeFormat.format(new Date(mNextTime * 1000)));
 } 

 interface OnTimeCompleteListener
 {
 void onTimeComplete();
 } 

} 

效果图:

程序很简单,我就不做过多的解释。

详细的大家可以看Demo,已封装,可直接使用,下载地址:http://xiazai.jb51.net/201611/yuanma/androidChronometer(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中CountDownTimer倒计时器用法实例

    本文实例讲述了Android中CountDownTimer倒计时器用法.分享给大家供大家参考,具体如下: 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了一个类,往往都自己写.现在发现了这个类,大家共享一下: 在一个TextView不断显示剩下的时间,代码如下: private TextView vertifyView; private CountDownTimer timer = new CountDownTimer(10000, 1000) { @Ov

  • Android实现计时与倒计时的常用方法小结

    本文实例总结了Android实现计时与倒计时的常用方法.分享给大家供大家参考,具体如下: 方法一 Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(Bundle savedInstanceState){ super.onC

  • Android实现加载广告图片和倒计时的开屏布局

    这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局.程序中设置的LayoutParams,划分额外空间比例为6分之5,具体权重比例可根据用户自己需求来自定义,异步加载广告图片,相关的Android代码. 具体实现代码如下: package cn.waps.extend; import android.app.Activity; import android.content.Context; import android.content.res.Configuration;

  • Android自定义圆形倒计时进度条

    效果预览 源代码传送门:https://github.com/yanzhenjie/CircleTextProgressbar 实现与原理 这个文字圆形的进度条我们在很多APP中看到过,比如APP欢迎页倒计时,下载文件倒计时等. 分析下原理,可能有的同学一看到这个自定义View就慌了,这个是不是要继承View啊,是不是要绘制啊之类的,答案是:是的.但是我们也不要担心,实现这个效果实在是so easy.下面就跟我一起来看看核心分析和代码吧. 原理分析 首先我们观察上图,需要几个部分组成: 1. 外

  • Android实现倒计时方法汇总

    Android开发中经常会有倒计时的功能,下面将总结出常见的集中实现方式. 1.直接使用Handler的消息机制来实现 xml布局中文件如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match

  • Android 实现闪屏页和右上角的倒计时跳转实例代码

    以前编程的时候,遇到倒计时的功能时,经常自己去写,但其实Android已经帮封装好了一个倒计时类CountDownTimer,其实是将后台线程的创建和Handler队列封装成为了一个方便的类调用. 闪屏页用到了handler和CountDownTimer类,还需配置一下Activity的主题,这里是:android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 全屏主题的意思. 给大家展示下效果图: 代码如下所示: package

  • android实现倒计时功能代码

    效果图,每隔1秒,变换一下时间  xml: 复制代码 代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="mat

  • Android实现倒计时30分钟功能

    以30分钟为例写的一个倒计时: 直接上代码 public class MainActivity extends AppCompatActivity { private int minute = 30;//这是分钟 private int second = 0;//这是分钟后面的秒数.这里是以30分钟为例的,所以,minute是30,second是0 private TextView timeView; private Timer timer; private TimerTask timerTas

  • android自定义倒计时控件示例

    自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import android.widget.TextView; import com.new0315.R;

  • Android 列表倒计时的实现的示例代码(CountDownTimer)

    实习一段时间了,一直想写点技术总结,但一直没找到合适的主题.刚好,最近版本中我负责的模块遇到了个线程相关问题(之前一直画界面,做点基础功能,有点乏味),列表项倒计时的实现. 于是乎,我的第一篇android技术文章就诞生了. [醒目]该demo用Kotlin语言实现. 背景介绍 需要在ListView的item里实现倒计时,初看还挺简单的,但是真正做的时候也遇到了不少坑. 网上有不少类似文章,有用对TextView扩展实现的,也有用自带的CountDownTimer实现的,本文就是用CountD

随机推荐