前言 

在打开爱奇艺等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. C#图片处理之: 另存为压缩质量可自己控制的JPEG

    处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件使用C#很方便的就可以把多种格式的图片文件读到B ...

  2. C# GC.Collect()

    用C#写了一个运用ICE组件进行接口通信的服务程序,程序运行很正常,可是在客户端调用ICE接口时出现了大量的数据丢失,而且偶尔还通信不上,服务端最明显的现象就是telnet服务的通信端口时不通(cmd ...

  3. BrnShop开源网上商城第三讲:插件的工作机制

    这几天BrnShop的开发工作比较多,所以这一篇文章来的晚了一些,还请大家见谅呀!还有通知大家一下BrnShop1.0.312版本已经发布,此版本添加了报表统计等新功能,需要源码的园友可以点此下载.好 ...

  4. Ubuntu 12.04 和 Win7 双系统安装

    Thinkpad T400上成功安装双系统 安装Win7 使用光盘按步骤安装,到这里是一个没有分区的硬盘,做了如下分区: 100M(系统保留),40G(C盘),60G(D盘),80G(E盘),52G( ...

  5. [转]优化数据库大幅度提高Oracle的性能

    几个简单的步骤大幅提高Oracle性能--我优化数据库的三板斧. 数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据 ...

  6. 2015年10月16日HTML标签表单笔记

    textarea只是纯文本编辑框,要想输入各种样式的文本.图片.表格等需要使用“富文本编辑框”.html4暂无富文本编辑框,可使用第三方工具实现此效果. <textarea></te ...

  7. 【HTML】Beginner4:Heading

    1.Headings h1 h2 h3 h4 h5 h6     h1 being the almighty emperor of headings     h6 being the lowest p ...

  8. Java笔记(二十一)……String与StringBuffer

    String类 String类是一个特殊的类,叫做只读类,一旦创建了对象,便不可被改变,同样"abc"既为一个常量,也为一个对象,也是不可以改变的 String s1 = &quo ...

  9. Esper系列(十)NamedWindow语法delete、Select+Delete、Update

    On-Delete With Named Windows 功能:在Named Windows中删除事件. 格式: 1  ,   4  field_b = win.field_a,  5  field_ ...

  10. opengl (1) 基本API的熟悉

    代码从此处下载 1 运行如下代码,可以看到如下效果,我们利用opengl画出一个三角形. void renderScene(void) { /* glClear清除缓冲区 */ glClear(GL_ ...