Android应用开发之FrameLayout (帧布局)+小鸟飞翔案例
来源:互联网 发布:ubuntu手机远程控制 编辑:程序博客网 时间:2024/05/21 11:01
帧布局中的每一个组件都代表一个画面,默认以屏幕左上角作为( 0,0 )坐标,按组件定义的先后顺序依次逐屏显示 , 后面出现的会覆盖前面的画面 。 用该布局可以实现动画效果 。
在该布局文件中定义一个 id 为 frame 的帧布局文件。
编写 FreamTestActivity.java 类
说明:
由于 FrameLayout 中后出现的 UI 控件会覆盖前面出现的 UI 控件,每次只能显示一个 UI 控件,因此,我们可以通过在 Activity 中对每次显示的图片内容进行切换以实现动画效果 。 或许你会想到开启一条线程来控制切换 , 但在非主线程中不能更新 UI 界面 , 所以 , 我们使用了Android 提供的消息通讯类 Handler 。该类可以实现非主线程和负责 UI 的主线程之间的通信 ,进而间接实现非主线程更新 UI 界面。由于 sleep 方法中的sendMessageDelayed(obtainMessage(0), delayMillis); 本身会延迟发送一个消息 , 该消息
会被框架传递给 handleMessage 事件 。 我们在 handleMessage() 方法中再次调用 sleep() 方法 ,形成一个循环调用 。 在我们对界面进行点击之前 , 两个方法会一直循环调用 。 前景图片也会不断的切换,进而实现动画的效果。
接下来,我们用三幅图片实现一只小鸟飞翔的动画效果。三张图片如下:
编写的mail.xml文件:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/frame"></FrameLayout>
在该布局文件中定义一个 id 为 frame 的帧布局文件。
编写 FreamTestActivity.java 类
package cn.class3g;import android.app.Activity;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.FrameLayout;public class FreamTestActivity extends Activity {FrameLayout frame = null;boolean flag = true;class MyHandler extends Handler {int i = 0;public void handleMessage(Message msg) {i++;show(i % 3);sleep(50);}public void sleep(long delayMillis) {if (flag) {this.sendMessageDelayed(this.obtainMessage(0), delayMillis);}}}void show(int i) {Drawable a = getResources().getDrawable(R.drawable.a1);Drawable b = getResources().getDrawable(R.drawable.a2);Drawable c = getResources().getDrawable(R.drawable.a3);switch (i) {case 0:frame.setForeground(a);break;case 1:frame.setForeground(b);break;case 2:frame.setForeground(c);break;}}public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);frame = (FrameLayout) findViewById(R.id.frame);final MyHandler myHandler = new MyHandler();myHandler.sleep(50);frame.setOnClickListener(new OnClickListener() {public void onClick(View arg0) {// TODO Auto-generated method stubflag = !flag;myHandler.sleep(10);}});}}
说明:
由于 FrameLayout 中后出现的 UI 控件会覆盖前面出现的 UI 控件,每次只能显示一个 UI 控件,因此,我们可以通过在 Activity 中对每次显示的图片内容进行切换以实现动画效果 。 或许你会想到开启一条线程来控制切换 , 但在非主线程中不能更新 UI 界面 , 所以 , 我们使用了Android 提供的消息通讯类 Handler 。该类可以实现非主线程和负责 UI 的主线程之间的通信 ,进而间接实现非主线程更新 UI 界面。由于 sleep 方法中的sendMessageDelayed(obtainMessage(0), delayMillis); 本身会延迟发送一个消息 , 该消息
会被框架传递给 handleMessage 事件 。 我们在 handleMessage() 方法中再次调用 sleep() 方法 ,形成一个循环调用 。 在我们对界面进行点击之前 , 两个方法会一直循环调用 。 前景图片也会不断的切换,进而实现动画的效果。
点击图片之后,小鸟停止飞翔。
- Android应用开发之FrameLayout (帧布局)+小鸟飞翔案例
- android 开发布局之FrameLayout
- Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Framelayout分析)
- Android UI之FrameLayout(帧布局)
- Android之FrameLayout(帧布局)
- Android之FrameLayout(帧布局)
- Android开发6:布局管理器3(帧布局FrameLayout-案例霓虹灯效果用到的知识点)
- (四)Android布局之帧布局(FrameLayout)
- Android FrameLayout(帧布局)
- Android布局之FrameLayout
- Android之FrameLayout布局
- Android-布局之FrameLayout
- Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Linearlayout分析)
- Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Relativelayout分析)
- 【Android 开发教程】FrameLayout帧布局
- android布局 FrameLayout (单帧布局)
- Android应用开发揭秘(奋斗之小鸟)_PDF 电子书
- Android FrameLayout 帧布局
- Ubuntu解决gedit warning问题的方法
- 利用已有数据库配合ASP.NET2.0内置用户 角色 授权系统打造自己的权限分配程序(2)
- 布局--霓虹灯的实现
- 地理(投影)坐标与屏幕坐标的转换!
- C++函数isacscii
- Android应用开发之FrameLayout (帧布局)+小鸟飞翔案例
- ubuntu屏幕截图工具:scrot,可截鼠标拖曳的矩形区域图形
- MFC程序逆向 – 消息篇
- 关于hibernate数据库设计字段默认值
- c#小工具,位序批量转换工具,hex到hex。bit order converter,hex to hex
- ADO数据库访问技术
- 实现js的replaceAll方法
- Linux文件
- 常用的英语接待口语,不管你进不进外企都一定要看看…