Android应用开发之FrameLayout (帧布局)+小鸟飞翔案例


 

[日期:2011-12-12] 来源:Linux社区  作者:lihongjian944043440 [字体:大 中 小] 

 


 


 
编写 FreamTestActivity.java 类
1.package cn.class3g;  
2.  
3.  
4.import Android.app.Activity;  
5.import android.graphics.drawable.Drawable;  
6.import android.os.Bundle;  
7.import android.os.Handler;  
8.import android.os.Message;  
9.import android.view.View;  
10.import android.view.View.OnClickListener;  
11.import android.widget.FrameLayout;  
12.  
13.  
14.public class FreamTestActivity extends Activity {  
15.    FrameLayout frame = null;  
16.    boolean flag = true;  
17.  
18.  
19.    class MyHandler extends Handler {  
20.        int i = 0;  
21.  
22.  
23.        public void handleMessage(Message msg) {  
24.            i++;  
25.            show(i % 3);  
26.            sleep(50);  
27.        }  
28.  
29.  
30.        public void sleep(long delayMillis) {  
31.            if (flag) {  
32.                this.sendMessageDelayed(this.obtainMessage(0), delayMillis);  
33.            }  
34.        }  
35.    }  
36.  
37.  
38.    void show(int i) {  
39.        Drawable a = getResources().getDrawable(R.drawable.a1);  
40.        Drawable b = getResources().getDrawable(R.drawable.a2);  
41.        Drawable c = getResources().getDrawable(R.drawable.a3);  
42.  
43.  
44.        switch (i) {  
45.        case 0:  
46.            frame.setForeground(a);  
47.            break;  
48.        case 1:  
49.            frame.setForeground(b);  
50.            break;  
51.        case 2:  
52.            frame.setForeground(c);  
53.            break;  
54.        }  
55.    }  
56.  
57.  
58.    public void onCreate(Bundle savedInstanceState) {  
59.        super.onCreate(savedInstanceState);  
60.        setContentView(R.layout.main);  
61.        frame = (FrameLayout) findViewById(R.id.frame);  
62.        final MyHandler myHandler = new MyHandler();  
63.        myHandler.sleep(50);  
64.        frame.setOnClickListener(new OnClickListener() {  
65.  
66.  
67.            public void onClick(View arg0) {  
68.                // TODO Auto-generated method stub   
69.                flag = !flag;  
70.                myHandler.sleep(10);  
71.            }  
72.        });  
73.  
74.  
75.    }  
76.}

说明:
由于 FrameLayout 中后出现的 UI 控件会覆盖前面出现的 UI 控件,每次只能显示一个 UI 控件,因此,我们可以通过在 Activity 中对每次显示的图片内容进行切换以实现动画效果 。 或许你会想到开启一条线程来控制切换 , 但在非主线程中不能更新 UI 界面 , 所以 , 我们使用了Android 提供的消息通讯类 Handler 。该类可以实现非主线程和负责 UI 的主线程之间的通信 ,进而间接实现非主线程更新 UI 界面。由于 sleep 方法中的sendMessageDelayed(obtainMessage(0), delayMillis); 本身会延迟发送一个消息 , 该消息
会被框架传递给 handleMessage 事件 。 我们在 handleMessage() 方法中再次调用 sleep() 方法 ,形成一个循环调用 。 在我们对界面进行点击之前 , 两个方法会一直循环调用 。 前景图片也会不断的切换,进而实现动画的效果。

 

 

 

 


点击图片之后,小鸟停止飞翔。

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-12/49200p2.htm

你可能感兴趣的:(Android应用开发之FrameLayout (帧布局)+小鸟飞翔案例)