前言:
看到标题可能大家有个疑问了,为什么用帧布局呢,其他布局就不行吗?因为通过帧布局可以很方便地实现多个控件叠加的效果,可以讲这是帧布局的优点。所以,博主在这里选用FrameLayout来实现一个闪烁霓虹灯效果。
效果图:
注明:Gif没录制,大家可以自己去运行出效果
布局文件自己可以去实现,在此就不贴出来了。
MainActivity.java
package com.example.handler02;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
public class MainActivity extends Activity {
final int[] colors = new int[]{
R.color.color5,
R.color.color4,
R.color.color3,
R.color.color2,
R.color.color1,
};
final int[] names = new int[]{
R.id.view0,
R.id.view1,
R.id.view2,
R.id.view3,
R.id.view4,
R.id.view5,
};
TextView view[] = new TextView[7];
class MyHandler extends Handler {
int i = 0;
public void handleMessage(Message msg) {
i++;
if (i >= 6) {
i = 1;
}
for (int m = 5 - i, n = 0; m < 5; m++, n++) {
view[m].setBackgroundResource(colors[n]);
}
for (int m = 0; m < 5 - i; m++) {
view[m].setBackgroundResource(colors[m + i]);
}
sleep(100);
}
public void sleep(int j) {
sendMessageDelayed(obtainMessage(0), j);
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int i = 0; i < 5; i++) {
view[i] = (TextView) findViewById(names[i]);
}
final MyHandler myHandler = new MyHandler();
myHandler.sleep(100);
}
}
/**使用了Android 提供的消息通讯类Handler 。
* 该类可以实现非主线程和负责UI的主线程之间的通信
* 进而间接实现非主线程更新UI 界面。由于sleep 方法中的
* sendMessageDelayed(obtainMessage(0), delayMillis);
* 本身会延迟发送一个消息 , 该消息会被框架传递给handleMessage 事件 。
* 我们在handleMessage() 方法中再次调用sleep() 方法 ,形成一个循环调用 。 在我们对
* 界面进行点击之前 , 两个方法会一直循环调用 。 前景图片也会不断的切换,进而实现霓虹灯的效果。
*/
欢迎学习交流,觉得不错就顶下咯。