代码大致如下:
首先是main.xml:
主要是几个TextView用来填充,使用的是FrameLayout的布局。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:id="@+id/textview1" android:layout_width="300dp"
android:layout_height="300dp" android:layout_gravity="center" />
<TextView android:id="@+id/textview2" android:layout_width="240dp"
android:layout_height="240dp" android:layout_gravity="center" />
<TextView android:id="@+id/textview3" android:layout_width="180dp"
android:layout_height="180dp" android:layout_gravity="center" />
<TextView android:id="@+id/textview4" android:layout_width="120dp"
android:layout_height="120dp" android:layout_gravity="center" />
<TextView android:id="@+id/textview5" android:layout_width="60dp"
android:layout_height="60dp" android:layout_gravity="center" />
</FrameLayout>
main.java里面是让Activity实现Runnable接口,在run()函数里设置每个TextView的背景颜色。并使用Handler来实现每隔多少秒执行一次。
package cn.eoe.neonlight;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
public class Main extends Activity implements Runnable {
// 5个TextView的颜色值
private int[] colors = new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF,
0xFFFF00FF, 0xFF00FFFF };
// 每一次颜色的下一个颜色的索引,最后一个颜色的下一个颜色是第一个颜色,相当于循环链表
private int[] nextColorPointers = new int[] { 1, 2, 3, 4, 0 };
private View[] views; // 保存5个TextView
private int currentColorPointer = 0; // 当前颜色索引(指针)
private Handler handler;
@Override
public void run() {
int nextColorPointer = currentColorPointer;
for (int i = views.length - 1; i >= 0; i--) {
// 设置当前TextView的背景颜色
views[i].setBackgroundColor(colors[nextColorPointers[nextColorPointer]]);
// 获得下一个TextView的背景颜色值的索引(指针)
nextColorPointer = nextColorPointers[nextColorPointer];
}
currentColorPointer++;
if (currentColorPointer == 5)
currentColorPointer = 0;
handler.postDelayed(this, 300); // 每300毫秒循环一次
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 初始化views数组
views = new View[] { findViewById(R.id.textview5),
findViewById(R.id.textview4), findViewById(R.id.textview3),
findViewById(R.id.textview2), findViewById(R.id.textview1) };
handler = new Handler();
handler.postDelayed(this, 300); // 每300毫秒循环一次
}
}