前言 

在打开爱奇艺等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();
} }

android实现倒计时的更多相关文章

  1. android自定义倒计时控件示例

    这篇文章主要介绍了Android秒杀倒计时自定义TextView示例,大家参考使用吧 自定义TextView控件TimeTextView代码: 复制代码 代码如下: import android.co ...

  2. android中倒计时控件CountDownTimer分析

    android中倒计时控件CountDownTimer分析 1 示例代码 new CountDownTimer(10000, 1000) { public void onTick(long milli ...

  3. [原创]Android秒杀倒计时自定义TextView

    自定义TextView控件TimeTextView代码: import android.content.Context; import android.content.res.TypedArray; ...

  4. Android 关于倒计时功能的实现

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

  5. Android 开发 倒计时功能 转载

    原文地址:https://www.cnblogs.com/xch-yang/p/7920419.html Android为我们封装好了一个抽象类CountDownTimer,可以实现计时器功能: /* ...

  6. Android 自定义倒计时控件CountdownTextView

    效果如下: 剩余 00:59:21 package com.bihu.advertiserapp.widgets; import android.annotation.TargetApi; impor ...

  7. Android 验证码倒计时两种方案

    使用 第一种方案:自定义控件 1.在布局中使用 <?xml version="1.0" encoding="utf-8"?> <Relativ ...

  8. android实现倒计时,最简单实现RecyclerView倒计时+SwipeRefreshLayout下拉刷新

    先上效果图: RecyclerView + SwipeRefreshLayout 实现倒计时效果 MainActivity.java package top.wintp.counttimedemo1; ...

  9. Android CountDownTimer 倒计时

    摘自:http://www.cnblogs.com/over140/archive/2011/12/20/2294220.html 继承关系 public abstract class CountDo ...

随机推荐

  1. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口(Ⅱ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 系统设置>,主要是介绍系统浏览器在线下载安装,这些前期准备是非常重要的. 最近忙于将工程管理系统中各个模块,用业务流程方 ...

  2. Oracle将英文字符集数据转换成中文

    转换背景:老系统数据为英文字符集,需要将老数据(Oracle 8i)转换到oracle 10g(中文字符集)中 思路:先将老数据从8i的数据库中导出,导出的数据库文件为英文字符集,再将10g的数据库改 ...

  3. ActiveMQ, RabbitMQ和ZeroMQ 选型关注点

    选择MQ时,主要关注的特性,可能就以下几个: 通信模式(是否满足业务场景): ActiveMQ: queue(producer/consumer), topic(publisher/subsriber ...

  4. Hadoop datanode无法启动的错误

    在启动Hadoop分布式部署的过程中,发现datanode没有正常启动,查看了一下日志发现报错: java.io.IOException: Incompatible clusterIDs in /op ...

  5. mysql server install

    1.首先在mysql的官网www.mysql.com或者其他网站下载mysql.zip或者mis格式的文件目前5.6的差不多300多M. 2.zip压缩包是绿色版的不用安装,直接用dos命令操作就行. ...

  6. 用BigDecimal类实现Fibonacci算法

    Fibonacci(N)=Fibonacii(N-1)+Fibonacci(N-2) 其中 Fibonacci(0)=0;Fibonacci(1)=1 用循环或则递归实现Fibonacci算法很简单, ...

  7. mysql实用指南

    mysqld --verbose --help: 可以显示 mysql 的编译配置选项,即功能配置描述. mysql 的配置文件my.cnf调用次序(mysqld --verbose --help 的 ...

  8. A Tour of Go Short variable declarations

    Inside a function, the := short assignment statement can be used in place of a var declaration with ...

  9. hdoj 2 括号配对问题【数组模拟实现+STL实现】

    栈遵循先进后出的原则 括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0 ...

  10. JAVA之装饰者模式

    装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...