Android使用CountDownTimer类实现倒计时闹钟

下面使用CountDownTimer类实现倒计时小闹钟,CountDownTimer类其实很简单,一般只需重写其onFinish和onTick方法就可以实现倒计时小闹钟,代码如下:

MainActivity:

package com.home.brewclock; 

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; 

public class MainActivity extends Activity implements OnClickListener {
  private Button addTimeBtn;
  private Button decreaseTimeBtn;
  private Button startBtn;
  private Button closeMusicBtn;
  private TextView timeText; 

  private int brewTime = 3;
  private CountDownTimer countDownTimer;
  private boolean isBrewing = false;
  private MediaPlayer alarmMusic; 

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 

    addTimeBtn = (Button) findViewById(R.id.main_btn_up);
    decreaseTimeBtn = (Button) findViewById(R.id.main_btn_down);
    startBtn = (Button) findViewById(R.id.main_start);
    closeMusicBtn = (Button) findViewById(R.id.main_btn_close_music);
    timeText = (TextView) findViewById(R.id.main_tv);
    addTimeBtn.setOnClickListener(this);
    decreaseTimeBtn.setOnClickListener(this);
    startBtn.setOnClickListener(this);
    closeMusicBtn.setOnClickListener(this);
    setBrewTime(3);
  } 

  /**
   * 设置闹钟倒计时初始值
   *
   * @param minutes
   */
  public void setBrewTime(int minutes) {
    if (isBrewing)
      return;
    brewTime = minutes; 

    if (brewTime < 1) {
      brewTime = 1;
    }
    timeText.setText(String.valueOf(brewTime) + "m");
  } 

  /**
   * 开启闹钟
   */
  public void startBrew() {
    // 创建一个CountDownTimer对象记录闹钟时间
    countDownTimer = new CountDownTimer(brewTime * 60 * 1000, 1000) {
      @Override
      public void onTick(long millisUntilFinished) {
        timeText.setText(String.valueOf(millisUntilFinished / 1000)
            + "s");
      } 

      @Override
      public void onFinish() {
        isBrewing = false;
        timeText.setText(brewTime + "m");
        startBtn.setText("Start");
        // 加载指定音乐,并为之创建MediaPlayer对象
        alarmMusic = MediaPlayer.create(MainActivity.this, R.raw.music);
        // 设置为循环播放
        alarmMusic.setLooping(true);
        // 播放音乐
        alarmMusic.start();
        closeMusicBtn.setVisibility(0);
      }
    };
    countDownTimer.start();
    startBtn.setText("Stop");
    isBrewing = true;
  } 

  /**
   * 停止计时
   */
  public void stopBrew() {
    if (countDownTimer != null) {
      countDownTimer.cancel();
    }
    isBrewing = false;
    startBtn.setText("Start");
  } 

  @Override
  public void onClick(View v) {
    if (v == addTimeBtn) {
      setBrewTime(brewTime + 1);
    } else if (v == decreaseTimeBtn) {
      setBrewTime(brewTime - 1);
    } else if (v == startBtn) {
      if (isBrewing) {
        stopBrew();
      } else {
        startBrew();
      }
    } else if (v == closeMusicBtn) {
      if (alarmMusic != null) {
        alarmMusic.stop();
        closeMusicBtn.setVisibility(8);
      }
    }
  }
}

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" > 

  <Button
    android:id="@+id/main_btn_close_music"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="关闭音乐"
    android:visibility="gone" /> 

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:gravity="center"
    android:orientation="horizontal" > 

    <Button
      android:id="@+id/main_btn_down"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="-"
      android:textSize="40dp" /> 

    <TextView
      android:id="@+id/main_tv"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="10dp"
      android:text="0:00"
      android:textSize="40dp" /> 

    <Button
      android:id="@+id/main_btn_up"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="+"
      android:textSize="40dp" />
  </LinearLayout> 

  <Button
    android:id="@+id/main_start"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:text="Start" /> 

</RelativeLayout>

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

您可能感兴趣的文章:

  • Android手机闹钟服务AlarmManagerk开发案例
  • 简单实现Android闹钟程序 附源码
  • Android闹钟设置的解决方案
  • Android编程闹钟设置方法详解
  • Android自定义View 实现闹钟唤起播放闹钟铃声功能
  • 简单实现Android闹钟功能
  • Android闹钟机制实现定时任务功能
  • Android仿正点闹钟时间齿轮滑动效果
  • Android如何在App中启动系统闹钟
  • android用闹钟定时做http请求推送的解决方案
(0)

相关推荐

  • 简单实现Android闹钟功能

    闹钟的简单实现,只有显示时间和设置闹钟. AlarmView package com.example.lenovo.clock2; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import a

  • Android仿正点闹钟时间齿轮滑动效果

    看到正点闹钟上的设置时间的滑动效果非常好看,自己就想做一个那样的,在网上就开始搜资料了,看到网上有的齿轮效果的代码非常多,也非常难懂,我就决定自己研究一下,现在我就把我的研究成果分享给大家.我研究的这个效果出来了,而且代码也非常简单,通俗易懂.效果图如下: 首先是MainActivity的布局文件,这个布局文件非常简单,就是一个Button:activity_main.xml文件,代码如下: <?xml version="1.0" encoding="utf-8&quo

  • Android如何在App中启动系统闹钟

    由于不同Android手机厂商提供的系统闹钟包名都不一致,所以只能通过过滤当前手机所有的应用,以确定闹钟应用的包名,进而启动它. 这里采用的过滤规则是:系统应用 && 应用的PackageName包含"widget" 和 "clock" 1.布局文件  activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&

  • Android闹钟设置的解决方案

    Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 1.API19开始AlarmManager的机制修改. 2.应用程序被Kill掉后,设置的闹钟不响. 3.6.0以上进入Doze模式会使JobScheduler停止工作. 4.手机设置重启后,闹钟失效问题. API19以上AlarmManager机制的修改 API19之前AlarmManager提供了三个设置闹钟的方法,由于业务

  • Android手机闹钟服务AlarmManagerk开发案例

    AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Service,BroadcastReceiver) 获取AlarmManager对象: getSystemService(Service.ALARM_SERVICE) 调用其中的方式设置定时器启动指定组件: set(int type,long triggerAtTime,PendingIntent operation)设置在TriggerAtTime时间启动由oper

  • Android自定义View 实现闹钟唤起播放闹钟铃声功能

    先上图看一下闹钟唤期页面的效果 实现的功能: 1:转动的图片根据天气情况更换 2:转动时间可以设置,转动结束,闹铃声音就结束 3:光圈颜色渐变效果 直接上代码啦: package com.yuekong.sirius.extension.customview; import android.animation.Animator; import android.animation.ValueAnimator; import android.content.Context; import andro

  • Android闹钟机制实现定时任务功能

    Android的闹钟实现机制, 需要调用AlarmManager.set()将闹铃时间记录到系统中,当闹铃时间到后,系统会给应用程序发送广播,我们只需要去注册广播接收器就可以了. 本文分三部分讲解如何实现闹钟: 目录: 1. 设置闹铃时间; 2. 接收闹铃事件广播; 3. 重开机后重新计算并设置闹铃时间; 1. 设置闹铃时间(毫秒) private void setAlarmTime(Context context, long triggerAtMillis) { AlarmManager am

  • 简单实现Android闹钟程序 附源码

    这个应用实现了简单的闹钟功能,关闭程序的状态中也可以进行闹钟的提醒. 这里遗留了一个问题: 如果我通过应用本身关闭程序,是可以实现我上述所说的功能,但是如果我在手机进程管理中实现应用程序的关闭操作,这个提醒就不起作用了,我很疑惑的是,我通过应用程序本身关闭了后,在进程中也是查看不到这个应用了的.所以哪位知道的帮留个言指点下,谢谢. ClockDemo.java package com.example.clock; import java.util.Calendar; import android

  • android用闹钟定时做http请求推送的解决方案

    设计思路 如果在开发当中需要做push接入,而产品又要求不允许用第三方sdk(百度push,友盟push),而且又没有网络编程的经验,这个时候怎么办?这里就给大家分享下用http请求解决这个问题. 大体的设计思路是,写一个service(为了保证长时间运行不被kill,就将其定义到另外的进程当中去),在这个service里面启动闹钟,每隔一段时间(这个时间可以自己定义)去请求服务器,如果有新的push消息,就通知给用户. 具体实现 貌似很简单定义一个闹钟不断轮循请求服务器一句话,却在实际开发中要

  • Android编程闹钟设置方法详解

    本文实例讲述了Android编程闹钟设置方法.分享给大家供大家参考,具体如下: 闹钟在生活中最常见了,在Android中可以通过AlarmManager来实现闹钟,AlarmManager类专门用来设置在某个指定的时间去完成指定的时间.AlarmManager就会通过onReceive()方法去执行这些事件,就算系统处于待机状态,同样不会影响运行.可以通过Context.getSystemService方法来获得该服务.AlarmManager中的方法不少,如下: 方法 说明 Cancel 取消

随机推荐