下载了韩寒的电子杂志《一个》,它有一个广告,就是每次进入程序的时候都会有一个静态的图片(如果没猜错的话应该是ImageView),然后显示几秒钟过后才进入真正的程序,其他的一些APP中也有一些是刚进程序的时候,先显示一张静态的等待图片,其实那个是等待加载的图片,其实功能也和这个类似,只不过那个是加载完成后再跳转,我这个为了实现定时就是显示固定的实现,那么这个简单的有用的小功能是如何实现的呢?
首先这个功能要用到两个知识点一个是Handler 一个是定时器工具TimerTask。备注:一般情况下TImerTask我们都是配合Timer来使用利用Timer来控制我们需要的时间。例如5秒后执行run()中的内容。
TimerTask task = new TimerTask() { @Override public void run() { // to do what you want } }; Timer timer = new Timer(); timer.schedule(task, 5000);
我们的需求实现起来其实很简单,那就是在一个activity里面有一个ImageView开始的时候让它显示5秒,过后隐藏它就能达到我们的效果了,这个时候如果用上述的方法的话,则程序运行会报错。
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
这主要是Android的相关View和控件不是线程安全的,所以使用Handler可以很好的处理主线程UI的更新操作,那这里既然引入了Handler那么我们就可以利用Handler来控制时间了,所以就不用Timer了最后的代码如下:
TimerTaskActivity.java
package com.challen; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; public class TimerTaskTestActivity extends Activity { ImageView image1; Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去掉title标题栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); // //设置activity全屏 // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, // WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置显示的XML,需要注意的是去掉状态栏和全屏的操作要放在setContentView之前,不然会报错。 setContentView(R.layout.main); // 显示的全屏图片 image1 = (ImageView) findViewById(R.id.Image1); handler = new Handler(); TimerTask task = new TimerTask() { public void run() { // 隐藏掉全屏图片 image1.setVisibility(View.GONE); } }; // 5秒后执行TimerTask任务 handler.postDelayed(task, 5000); } }
好了这样就实现了进入程序的时候首先是显示图片,然后显示5秒后才是去掉这张全屏图的内容,顺带把布局也放上来吧,这个ImageView需要放到最上面一层
main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/Image1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/bg" android:visibility="visible" /> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="图片消失后的内容" /> </LinearLayout>