Presentation is loading. Please wait.

Presentation is loading. Please wait.

第4章 闪烁霓虹灯--层布局的应用 授课老师:高成珍 QQ号: QQ群: 、

Similar presentations


Presentation on theme: "第4章 闪烁霓虹灯--层布局的应用 授课老师:高成珍 QQ号: QQ群: 、"— Presentation transcript:

1 第4章 闪烁霓虹灯--层布局的应用 授课老师:高成珍 QQ号:1281147324 QQ群:287966120、314753495
网络资源:

2 本章案例效果分析

3 相对布局 相对布局,顾名思义就是相对于某个参照物来确定自己的位置,由RelativeLayout类表示。每个控件的位置可通过它相对于参照物的方位以及对齐方式两方面信息来确定。 这种布局的关键是找到一个合适的参照物,通常参照物可分为两类:具体的某个控件或父容器。由于控件的直接父容器只有一个,所有相对于父容器的方位与对齐关系时,取值只有两个true或false。而相对于某一控件时,是通过控件的id来唯一确定的,因此相关属性值为控件的Id。 如果甲控件的位置需要根据乙控件的位置来确定,那么要求先定义乙控件,并且为乙控件添加id属性,再定义甲控件。

4 相对布局 属性 说明 android:layout_centerInParent 设置该组件是否位于父容器的正中央位置
android:layout_alignParentTop 设置该组件是否与父容器顶端对齐 android:layout_alignParentBottom 设置该组件是否与父容器底端对齐 android:layout_ alignParentLeft 设置该组件是否与父容器左边对齐 android:layout_ alignParentRight 设置该组件是否与父容器右边对齐 android:layout_toRightOf 指定该组件位于给定的ID组件的右侧 android:layout_toLeftOf 指定该组件位于给定的ID组件的左侧 android:layout_above 指定该组件位于给定的ID组件的上方 android:layout_below 指定该组件位于给定的ID组件的下方 android:layout_alignTop 指定该组件与给定的ID组件的上边界对齐 android:layout_ alignBottom 指定该组件与给定的ID组件的下边界对齐 android:layout_ alignLeft 指定该组件与给定的ID组件的左边界对齐 android:layout_ alignRight 指定该组件与给定的ID组件的右边界对齐

5 层布局(FrameLayout) 层布局或者帧布局(FrameLayout)是指布局内的每个控件单独占一帧或一层,该层中未包含内容的部分将是透明的,控件之间是相互独立的。 控件添加的顺序即层叠加的次序,后面添加的控件会覆盖前面的控件,如果后添加的控件未能完全覆盖前面的控件,则未覆盖的部分将会显示。 层布局中控件的位置可通过android:layout_gravity属性进行设置。通过层布局能够很方便的实现多个控件叠加或者渐变的效果。 注意:由于层布局中每个控件单独占一层,也就是说层布局中各个控件之间不存在任何关系,即不能在层布局中,按比例分割屏幕。

6 定时器 定时器是指规定一定的时间间隔,时间到了再接着执行某些操作,主要用于重复执行具有周期性变化规律的操作。Android中通过Timer类来封装定时器,通过调用schedule()方法来执行重复性操作,该方法需要传递三个参数: 第一个参数为TimerTask对象,表示具体要执行的任务,TimerTask类自身是一个抽象类,包含一个抽象方法run(),不能直接实例化,必须创建一个该类的子类,实现其run()方法,run()方法用于执行具体的操作; 第二个参数为执行该操作延迟的时间,单位为毫秒; 第三个参数为执行该操作的周期,单位为毫秒。

7 Handler消息传递机制 Android界面控件所在的线程为主线程,并且界面控件是非线程安全的, 所谓的非线程安全,是指当多个线程对其进行操作时,可能导致数据的不 一致。为了保证数据的一致性,Android中明确规定,子线程无法更改主线 程中的界面控件。但在实际Android应用开发中,尤其是涉及动画的游戏开 发中,需要让新启动的线程周期性地改变界面控件的属性值,那如何实现 呢? 主线程能够对界面进行变化,但并不清楚应该什么时候去变化,子线程虽然想对界面进行变化,但自身又不能对其改变,这样就陷入一种矛盾之中。这时候就需要借助一定的中介使得二者进行交互。Android中的Handler消息传递机制就应运而生了。 7

8 Handler消息传递机制 所谓的消息传递即在子线程中执行一些耗时的操作或计时,当需要改变主线程中的界面控件时,则发送一条消息,主线程收到消息后,自己更改界面显示。即子线程发送消息,主线程处理消息,而发送和处理消息都是通过Handler对象来完成的。 方法签名 描 述 void handleMessage (Message msg) 通过该方法获取、处理消息 final boolean sendEmptyMessage (int what) 发送一个只含有what标记的空消息 final boolean sendMessage (Message msg) 发送消息到Handler,通过handleMessage()方法接收和处理 final boolean hasMessages (int what) 监测消息队列中是否包含标记为what的消息 final boolean post (Runnable r) 将一个线程添加到消息队列 8

9 Handler消息传递机制 Handler类主要有两个作用: 在新启动的线程中发送消息; 在主线程中获取、处理消息。
新启动的线程何时发送消息?主线程又如何去获取并处理消息呢? 子线程发送消息的目的是为了让主线程的界面发生相应的变化,因此当需要更改界面显示时,即可在子线程中发送消息。 为了让主线程能“适时”地处理新启动的线程所发送的消息,显然只能通过回调的方式来实现,即一旦发送消息,则自动回调Handler对象的处理消息的方法,只需重写该方法,根据消息的类型不同做不同的处理。 9

10 Handler消息传递机制 Handler消息传递程序开发步骤: 1、创建Handler类对象,并重写handleMessage()方法;
在Handler消息传递过程中,发送和处理消息的是同一个Handler对象,谁发送谁处理,由于需要在子线程中访问Handler对象,因此Handler对象必须是成员变量或者用final修饰的变量。 10

11 Message类 Message 消息类,该类用于封装消息的信息,包括消息的标记、内容等,主要有以下几个关键字段:
①what:消息的标记,int类型,该标记是由用户自由定义的,以便接收者确定该消息是什么,从而做出相应的处理; ②arg1和arg2:整型参数,这两个字段主要用于存放简单的整型数值,如果想存复杂的数据,可通过Message对象的setData()方法进行存储; ③obj:对象,Object类型,传递给接收者的任意类型的对象; ④replyTo:Messenger类型(信使),可选的,用于答复该消息能够被发送,具体如何用取决于发送者和接收者。 11

12 Message类 方法签名 描述 Message() 构造方法,推荐使用Message.Obtain()
void copyFrom(Message o) 复制指定消息的内容 long getWhen() 获取消息发送的时间,单位为毫秒 Bundle getData() 获取消息中的数据 static Message obtain() 从消息池中获取一个消息 void setData (Bundle data) 向消息中写入数据 void setTarget(Handler target) 设置消息的目标对象 12

13 课后思考题 思考 请尝试用相对布局来实现本案例界面效果。 在原有界面基础上添加一个复选框,通过复选框可以 控制颜色块是否周期性发生变化。

14 思考与练习 本例使用Timer定时器来实现周期性改变控件背景功能,请尝试使用普通的线程来实现该功能。
在相对布局中,如果想让一个控件居中显示,则可设置该控件的( )。 A)android:gravity=“center” B)android:layout_gravity=“center” C)android:layout_centerInParent=“true” D)android :scaleType=“center” 相对布局中,下列属性的属性值只能为true或false的是( )。 A)android :layout_alignTop B)android :layout_alignParentTop C)android :layout_toLeftOf D)android:layout_above

15


Download ppt "第4章 闪烁霓虹灯--层布局的应用 授课老师:高成珍 QQ号: QQ群: 、"

Similar presentations


Ads by Google