启动画面加载时 闪烁点 实现

    运行效果:
       

  • 实现原理解析: 
               闪烁点其实就是一个个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);
				}
			}
		}
	}
}





猜你喜欢

转载自blog.csdn.net/lujiangui/article/details/38929345