运行效果:
- 实现原理解析:
闪烁点其实就是一个个ImageView,通过一个线程定时去改变ImageView的显示内容,即可可实现该效果。
实现代码:
<LinearLayout 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"
android:gravity="center"
android:orientation="horizontal"
tools:context=".MainActivity" >
<TextView
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="正在加载" />
<ImageView
android:id="@+id/iv1"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"/>
<ImageView
android:id="@+id/iv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"/>
<ImageView
android:id="@+id/iv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"/>
<ImageView
android:id="@+id/iv4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp" />
<ImageView
android:id="@+id/iv5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"/>
</LinearLayout>
MainActivity中实现业务逻辑:
package com.ljgui.mytestindex;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.widget.ImageView;
public class MainActivity extends Activity {
//1。定义一个数组,封装ImageView的ID的数组
//2。创建一个线程,每隔一定时间通知handler去修改主线程ui
//3。使用一个handler对象改变主线程ui
private static int[] imagID = {R.id.iv1,R.id.iv2,R.id.iv3,R.id.iv4,R.id.iv5};
private final static int SELECTED =1; //当标记为selected时,显示深色的图片
private final static int NO_SELECTED =2; //当标记为selected时,显示白色的图片
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化所有ImageView
for(int i:imagID){
ImageView iv = (ImageView) findViewById(i);
System.out.println(iv);
iv.setBackgroundResource(R.drawable.progress_bg_small);
}
new MyThread().start();
}
private Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SELECTED:
ImageView iv = (ImageView) findViewById(msg.arg1);
iv.setBackgroundResource(R.drawable.progress_go_small);
break;
case NO_SELECTED:
ImageView iv2 = (ImageView) findViewById(msg.arg1);
iv2.setBackgroundResource(R.drawable.progress_bg_small);
break;
}
}
};
/**
* 每隔一定时间,通过myHandler去改变主线程ui
*/
private class MyThread extends Thread{
@Override
public void run() {
Message msg;
while(true){
for(int i=0;i<5;i++){
//设置显示深色
msg = new Message();
msg.what=SELECTED;
msg.arg1 = imagID[i];
myHandler.sendMessage(msg);
msg = new Message();
//设置显示白色
if(i==0){
msg.what=NO_SELECTED;
msg.arg1 = imagID[5-1];
myHandler.sendMessage(msg);
}else{
msg.what=NO_SELECTED;
msg.arg1 = imagID[i-1];
myHandler.sendMessage(msg);
}
SystemClock.sleep(500);
}
}
}
}
}