android实现倒计时

前言 

在打开爱奇艺等app的欢迎界面的时候,右上角有一个倒计时的控件。倒计时完了以后进入主界面。现在我们来实现这个功能。

方法一

利用java的类Timer,TimerTask还有android的Handler

界面welcome_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<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">

    <TextView
        android:id="@+id/count_down"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp"
        android:gravity="center"
        android:textSize="32sp"
        android:textColor="#50000000"
        android:background="@drawable/count_down_background"
        tools:text="2"
        />
</RelativeLayout>
package com.example.counttimer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.TextView;

public class WelcomeActivity extends Activity {
    private final static int COUNT = 1;
    private TextView countDown;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_welcome);
        initView();
    }
   //sehedule的第而个参数是第一次启动延时的时间,第三个是每隔多长时间执行一次。单位都是ms。  //因此这里是每一秒发送一次消息给handler更新UI。  //然后三秒后时间到了,在timer的第二个sehedule中进行跳转到另外一个界面
    private void initView() {
        countDown =  (TextView) findViewById(R.id.count_down);
        final Timer timer = new Timer();
        final long end = System.currentTimeMillis() + 1000*3;
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(COUNT);

            }
        }, 0, 1000);
        //这里的schedule的第二个参数意义是到了这个时间尽快运行run里面的方法
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                 Intent i = new Intent(WelcomeActivity.this, SecondActivity.class);
                 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                 startActivity(i);
                 finish();
                 timer.cancel();
            }
        }, new Date(end));

    }

    private Handler handler = new Handler(){
        int num = 2;
        public void handleMessage(android.os.Message msg) {

            switch (msg.what) {
            case COUNT:
                countDown.setText(String.valueOf(num));
                num--;
                break;

            default:
                break;
            }
        };
    };

}
count_down_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:radius="8dp"/>

    <solid
        android:color="#1e000000"/>
</shape>

还有另外的一个空的activity就不贴出来了

效果如下:倒计时到0进入SecondActivity

方法二

利用android封装的类CountDownTimer。其实内部也是用Handler实现的。其他都一样。

package com.example.counttimer;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Window;
import android.widget.TextView;

public class WelcomeActivity extends Activity {
    private final static int COUNT = 1;
    private TextView countDown;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_welcome);
        initView();
    }

    private void initView() {
        countDown =  (TextView) findViewById(R.id.count_down);    //CountDownTimer构造器的两个参数分别是第一个参数表示总时间,第二个参数表示间隔时间。    //意思就是每隔xxx会回调一次方法onTick,然后xxx之后会回调onFinish方法。
        CountDownTimer timer = new CountDownTimer(3200,1000) {
            int num = 2;
            @Override
            public void onTick(long millisUntilFinished) {
                countDown.setText(String.valueOf(num));
                num--;
            }

            @Override
            public void onFinish() {          //计时完成调用
                 Intent i = new Intent(WelcomeActivity.this, SecondActivity.class);
                 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                 startActivity(i);
                 finish();
            }
        };
        timer.start();
    }

}
时间: 2024-10-12 11:44:29

android实现倒计时的相关文章

android CountDownTimer 倒计时

在倒计时通过自己曾用所有的时间handle延迟发送,实现.但最近Android其中发现,一类,它是Android倒计时提供实现类.使用简单,原则上也通过handle对于倒计时: 一个简单的小李子: private TextView text; private CountDownTimer timer = new CountDownTimer(10000, 1000) { @Override public void onTick(long millisUntilFinished) { text.s

android自定义倒计时控件示例

这篇文章主要介绍了Android秒杀倒计时自定义TextView示例,大家参考使用吧 自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.content.Context;import android.content.res.TypedArray;import android.graphics.Paint;import android.text.Html;import android.util.AttributeSet;import and

android中倒计时控件CountDownTimer分析

android中倒计时控件CountDownTimer分析 1 示例代码 new CountDownTimer(10000, 1000) { public void onTick(long millisUntilFinished) { LogUtil.i(TAG, "seconds remaining: " + millisUntilFinished / 1000); } public void onFinish() { LogUtil.i(TAG, "done!"

Android CountDownTimer倒计时简单使用

CountDownTimer: Schedule a countdown until a time in the future, with regular notifications on intervals along the way. 倒计时这个类比较简单,可以学习这样来设计类,下面看这个类的一个简单应用的例子: 这么个小例子也需要优化,优化之前什么也没考虑只实现了效果, 简单优化下增加了了多次点击Dlialog不重复创建和取消countdowntimer任务的代码: 简单优化后: pack

Android自定义倒计时控件

序: 最近越来越多的APP都是用手机号注册,一是为了方便用户记忆,二是为了增加用户账户的安全性.在我们进行交易操作或者修改密码等操作的时候,这时候需要输入短信验证码.这个控件会需要有倒计时的功能,这里主要总结常见的几种实现方式. 1.Android中实现倒计时的方法 第一种:直接用Handler的消息机制来实现 这种方式感觉是最原始的,这里不多说. 第二种:Timer和TimerTask 基本使用:获得Timer和TimerTask对象,然后启动,倒计时的逻辑写在handler里面 privat

Android 关于倒计时功能的说说

关于倒计时的实现,可以说有很多的方法,比较常见的就是Timer+TimerTask+Handler了,或者还可以配合Runnable.例如下面的代码: [html] view plaincopy import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.

Android 验证码倒计时两种方案

使用 第一种方案:自定义控件 1.在布局中使用 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_w

Android四大组件应用系列——使用BroadcastReceiver和Service实现倒计时

一.问题描述 Service组件可以实现在后台执行一些耗时任务,甚至可以在程序退出的情况下,让Service在后台继续保持运行状态.Service分本地服务和远程服务,Local地服务附在主进程上的main线程上而不是独立的进程,这样在一定程度上节约了资源:Remote服务占用独立的进程,由于是独立的进程,因此会占用一定的资源但在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性,一些提供系统服务的Service就是这种常驻的远

Android基础之CountDownTimer 倒计时类

app常用的60s倒计时计时功能: private static final int TIME_LIMIT = 60; private void initView() { // 相关控件 mResend = (TextView) findViewById(R.id.resend); // 重新发送btn mResend.setOnClickListener(this); mTimeLimit = (TextView) findViewById(R.id.time_limit); // 倒计时秒数