Hack3 - 创建定制的ViewGroup

  现在如果要我们设计这样的布局:
这里写图片描述
  有人会说,用RelativeLayout,然后指定每一个View的margin值。这种方法实现的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <View
        android:layout_width="100dp"
        android:layout_height="150dp"
        android:background="#FF0000" />
    <View
        android:layout_width="100dp"
        android:layout_height="150dp"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="20dp"
        android:background="#00FF00" />
    <View
        android:layout_width="100dp"
        android:layout_height="150dp"
        android:layout_marginLeft="60dp"
        android:layout_marginTop="40dp"
        android:background="#0000FF" />
</RelativeLayout>

这里写图片描述
  还有一种方法:创建自定义ViewGroup,它和这种调节Margin值的方法相比,具有以下优点:
  ① 在不同Activity中复用该视图时,更易维护。
  ② 开发者可以使用自定义属性来定制 ViewGroup 中子视图的
位置。
  ③ 布局文件更简明,更容易理解。
  ④ 如果需要修改 margin,不必重新手动计算每个子视图的
margin。
  那么接下来我们就来看看ViewGroup是怎么实现的。
1、理解Android绘制视图的方式
  先看官方文档的介绍:绘制布局由两个遍历过程组成:测量过程和布局过程。测量过程由measure(int, int) 方法完成,该方法从上到下遍历视图树。在递归遍历过程中,每个视图都会向下层传递尺寸和规格。当measure 方法遍历结束,每个视图都保存了各自的尺寸信息。第二个过程由layout(int, int, int,int) 方法完成,该方法也是由上而下遍历视图树,在遍历过程中,每个父视图通过测量过程的结果定位所有子视图的位置信息
  为了理解这个概念,下面分析ViewGroup 的绘制过程。第一步是测量ViewGroup 的宽度和高度,在onMeasure() 方法中完成这步操作。在该方法中,ViewGroup 通过遍历所有子视图计算出它的大小。最后一步操作,在onLayout() 方法中完成,在该方法中,ViewGroup 利用上一步计算出的测量信息,布局所有子视图。

2、创建CascadeLayout
(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值