Android开发——倒计时器自定义chronometer
来源:互联网 发布:星际淘宝网588 编辑:程序博客网 时间:2024/06/07 19:15
昨天我们说好了今天做出来一个倒计时器,然后博主不知道倒计时这个逻辑是通过控件实现的还是通过算法实现的就去网上“借”,在网上找了N多实例,然后发现倒计时的还真的是不多。不过也是有的,所以博主找了一个不错的,捋了捋,然后分享给大家。
CountDown.java
package com.example.chronometer;import java.text.SimpleDateFormat;import java.util.Date;import android.content.Context;import android.util.AttributeSet;import android.widget.Chronometer;/** * @author Squid * */public class CountDown extends Chronometer{private long time;private long nextTime;private OnTimeCompleteListener clistener;private SimpleDateFormat format;public CountDown(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubformat=new SimpleDateFormat("mm:ss");this.setOnChronometerTickListener(listener);}/* * * 设置时间格式 */public void setTimeFormat(String pattern){format=new SimpleDateFormat(pattern);}public void setOnTimeCompleteListener(OnTimeCompleteListener l) {clistener=l;}OnChronometerTickListener listener=new OnChronometerTickListener() {@Overridepublic void onChronometerTick(Chronometer chronometer) {// TODO Auto-generated method stubif (nextTime<=0) {if (nextTime==0) {CountDown.this.stop();if (null!=clistener) {clistener.onTimeComplete();}}nextTime=0;updateTimeNext();return;}nextTime--;updateTimeNext();}};/* * 初始化时间 */public void initTime(long _time_s){time=nextTime=_time_s;updateTimeNext();}private void updateTimeNext() {// TODO Auto-generated method stubthis.setText(format.format(new Date(nextTime*1000)));}/* * 重启 */public void reStart(long _time_s){if (_time_s==-1) {nextTime=time;}else{time=nextTime=_time_s;}this.start();}public void reStart(){reStart(-1);}/* * 继续计时 */public void onResume(){this.start();}/* * 暂停计时 */public void onPause(){this.stop();}interface OnTimeCompleteListener{void onTimeComplete();}}MainActivity.java
package com.example.chronometer;import com.example.chronometer.CountDown.OnTimeCompleteListener;import android.R.integer;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {private CountDown countDown;private int initTime=120;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);countDown=(CountDown)findViewById(R.id.cd);countDown.initTime(initTime);countDown.setOnTimeCompleteListener(new OnTimeCompleteListener(){@Overridepublic void onTimeComplete() {// TODO Auto-generated method stubToast.makeText(getApplicationContext(), "倒计时结束", Toast.LENGTH_LONG).show();}});}public void btnClick(View view){int id=view.getId();switch (id) {case R.id.button1:countDown.reStart();break;case R.id.button2:countDown.onPause();break;case R.id.button3:countDown.onResume();break;case R.id.button4:countDown.stop();countDown.initTime(initTime);break;default:break;}}}activity_main.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="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.chronometer.MainActivity" > <LinearLayout android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.chronometer.CountDown android:id="@+id/cd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="60dp"/> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="22dip" android:onClick="btnClick" android:text="开始" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dip" android:onClick="btnClick" android:text="暂停" /> <Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dip" android:onClick="btnClick" android:text="恢复" /> <Button android:id="@+id/button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dip" android:onClick="btnClick" android:text="重置" /> </LinearLayout></RelativeLayout>做出来的初始界面就是这样:
我们接下来就开始把今天下午学的东西理出来吧!
0 0
- Android开发——倒计时器自定义chronometer
- Android开发——Chronometer计时器控件
- Android控件开发之Chronometer计时器
- Android开发中Chronometer计时器用法问题
- Chronometer快速开发计时器
- Android倒计时器——CountDownTimer
- android之计时器chronometer
- android之计时器chronometer
- android 计时器 Chronometer
- android之计时器 chronometer
- Android---25---Chronometer计时器
- Android 计时器,仿Chronometer
- android chronometer 计时器
- Android之计时器Chronometer
- Android练习-----计时器(Chronometer)
- Android 自定义View -- 简单的倒计时器
- 自定义倒计时器
- Android 时间计时器控件 Chronometer
- nginx 与fastcgi、及动态语言配合的工作原理
- 访问其他应用程序的Activity
- 数据结构--直接插入排序
- Hibernate的数据映射关系
- R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列深度学习检测方法梳理
- Android开发——倒计时器自定义chronometer
- Spring 配置多数据源实现
- leetcode--Power of Two
- 李飞飞-我们该如何做研究
- 【NOIP提高组】B
- apache静态文件配置
- A【NOIP2017提高组模拟12.18】
- 对pearson相关系数以及协方差矩阵的理解
- 泰勒与极限