android學習筆記6:使用Framelayout實現霓虹燈效果 – Android移動開發技術文章_手機開發 Android移動開發教學課程

Framelayout即幀佈局,使用這種佈局可以把幾個控件疊加在一起。使用Framelayout結合textview就可以實現一個簡單的霓虹燈效果。

package org.crazyit.framelayout; 
 
import java.util.Timer; 
import java.util.TimerTask; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.widget.TextView; 
 
public class FrameLayoutTest extends Activity 

    private int currentColor = 0; 
    //定義一個顏色數組  
    final int[] colors = new int[] 
    { 
        R.color.color7, 
        R.color.color6, 
        R.color.color5, 
        R.color.color4,  
        R.color.color3, 
        R.color.color2, 
        R.color.color1,  
    }; 
    //顏色顯示數組,view為TextView控件  
    final int[] names = new int[] 
    { 
        R.id.View01, 
        R.id.View02, 
        R.id.View03, 
        R.id.View04, 
        R.id.View05, 
        R.id.View06, 
        R.id.View07 
    }; 
    TextView[] views = new TextView[7]; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);   
        for (int i = 0 ; i < 7 ; i++) 
        { 
            views[i] = (TextView)findViewById(names[i]); 
        } 
        //使用Handler進行消息處理  
        final Handler handler = new Handler() 
        { 
            @Override 
            public void handleMessage(Message msg) 
            { 
                //表明消息來自本程序所發送  
                if(msg.what == 0x1122) 
                { 
                    //依次改變7個TextView的背景色  
                    for(int i = 0 ; i < 7 – currentColor ; i++)   
                    { 
                        views[i].setBackgroundResource(colors[i + currentColor]); //改變背景色  
                    } 
                    for(int i = 7 – currentColor , j = 0 ; i < 7 ; i++ ,j++) 
                    { 
                        views[i].setBackgroundResource(colors[j]); 
                    } 
                } 
                super.handleMessage(msg); 
            } 
        }; 
        //定義一個線程周期性的改變currentColor變量值  
        new Timer().schedule(new TimerTask() 
        { 
            @Override 
            public void run() 
            { 
                currentColor++; 
                if(currentColor >= 6) 
                { 
                    currentColor = 0; 
                } 
                //發送一條消息通知系統改變7個TextView組件的背景色  
                Message m = new Message(); 
                //給該消息定義一個標識  
                m.what = 0x1122; 
                handler.sendMessage(m);  
            }        
        }, 0 , 100); //周期為100毫秒  
    } 

package org.crazyit.framelayout;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class FrameLayoutTest extends Activity
{
 private int currentColor = 0;
 //定義一個顏色數組
 final int[] colors = new int[]
 {
  R.color.color7,
  R.color.color6,
  R.color.color5,
  R.color.color4, 
  R.color.color3,
  R.color.color2,
  R.color.color1, 
 };
 //顏色顯示數組,view為TextView控件
 final int[] names = new int[]
 {
  R.id.View01,
  R.id.View02,
  R.id.View03,
  R.id.View04,
  R.id.View05,
  R.id.View06,
  R.id.View07
 };
 TextView[] views = new TextView[7];
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 
  for (int i = 0 ; i < 7 ; i++)
  {
   views[i] = (TextView)findViewById(names[i]);
  }
  //使用Handler進行消息處理
  final Handler handler = new Handler()
  {
   @Override
   public void handleMessage(Message msg)
   {
    //表明消息來自本程序所發送
    if(msg.what == 0x1122)
    {
     //依次改變7個TextView的背景色
     for(int i = 0 ; i < 7 – currentColor ; i++) 
     {
      views[i].setBackgroundResource(colors[i + currentColor]); //改變背景色
     }
     for(int i = 7 – currentColor , j = 0 ; i < 7 ; i++ ,j++)
     {
      views[i].setBackgroundResource(colors[j]);
     }
    }
    super.handleMessage(msg);
   }
  };
  //定義一個線程周期性的改變currentColor變量值
  new Timer().schedule(new TimerTask()
  {
   @Override
   public void run()
   {
    currentColor++;
    if(currentColor >= 6)
    {
     currentColor = 0;
    }
    //發送一條消息通知系統改變7個TextView組件的背景色
    Message m = new Message();
    //給該消息定義一個標識
    m.what = 0x1122;
    handler.sendMessage(m); 
   }  
  }, 0 , 100); //周期為100毫秒
 }
}
對應的XML文件

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<!– 依次定義7個TextView,先定義的TextView位於底層 
    後定義的TextView位於上層 –> 
<TextView android:id="@+id/View01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="210px" 
    android:height="50px" 
    android:background="#ff0000" 
    /> 
<TextView android:id="@+id/View02" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="180px" 
    android:height="50px" 
    android:background="#dd0000"     
    /> 
<TextView android:id="@+id/View03" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="150px" 
    android:height="50px" 
    android:background="#bb0000"     
    /> 
<TextView android:id="@+id/View04" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="120px" 
    android:height="50px" 
    android:background="#990000"     
    /> 
<TextView android:id="@+id/View05" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="90px" 
    android:height="50px" 
    android:background="#770000"     
    /> 
<TextView android:id="@+id/View06" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="60px" 
    android:height="50px" 
    android:background="#550000"     
    /> 
<TextView android:id="@+id/View07" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:width="30px" 
    android:height="50px" 
    android:background="#330000"     
    />        
</FrameLayout> 

 摘自 hn307165411的專欄

發佈留言