从公司的控件布局的实现类中学到的一点东西

自己实现的一个布局类YDLayout,这个布局类的布局方式是这样的:在一个容器中有多个控件,可实现容器放大时容器里的控件可根据自己的布局方案进行缩放,如,控件的某个边随着容器的放缩等比放缩(也可以四条边都放缩),或者是容器放缩后四条边可以以左上角的某个点的距离固定或者与中心点固定。这样子每个控件的四条边就会产生产生四个布局方式,如何把这四个布局的值和为一个值传到后台进行处理,并且后台的可以根据这个值能判断出来各个边框的布局情况。

实现的原理:

计算机的值的与运算

 

实现的方法:给四条边的各种情况设置为不同的值,其中这个值是按计算机位来设计的,

如000001,000010,000100,001000等

然后把这四个值相加,加为一个值传到后台,后台的布局实现类再把这个值和四条边不同情况的值进行与运算,这样就能得到各个边框的情况值

 public class YDLayoutAnchorScheme {
    /**不锚定,即由容器自己处理*/
    public static final int ANCHOR_NONE = 0;
    /**控件的上边框与容器的上边框距离固定*/
    public static final int ANCHOR_TOP = 1;
    /**控件的下边框与容器的下边框距离固定*/
    public static final int ANCHOR_BOTTOM = 2;
    /**控件的左边框与容器的左边框距离固定*/
    public static final int ANCHOR_LEFT = 4;
    /**控件的右边框与容器的右边框距离固定*/
    public static final int ANCHOR_RIGHT = 8;
    /**控件的中心与容器的中心距离固定*/
    public static final int ANCHOR_CENTRE = 16;
    /**控件的上边框与容器的上边框距离等比例缩放*/
    public static final int ANCHOR_TOP_SCALE = 32;
    /**控件的下边框与容器的下边框距离等比例缩放*/
    public static final int ANCHOR_BOTTOM_SCALE = 64;
    /**控件的左边框与容器的左边框距离等比例缩放*/
    public static final int ANCHOR_LEFT_SCALE = 128;
    /**控件的右边框与容器的右边框距离等比例缩放*/
    public static final int ANCHOR_RIGHT_SCALE = 256;
    /**下面两个是在满足控件的中心与容器的中心距离相同的的前提下四边框的处理方式*/
    /**四边框固定大小*/
    public static final int ANCHOR_FIXED=512;
    /**四边框等比缩放*/
    public static final int ANCHOR_SCALE=1024;
    /**锚定方案*/
    private int anchor = ANCHOR_NONE;
    /**旧的尺寸*/
    private Rectangle oldBounds;

    public YDLayoutAnchorScheme()
    {
    }

    /**
     * 创造布局约束
     *
     * @param anchor
     *            锚定方式
     * @param bounds
     *            与约束相连的控件的设计时大小
     */
    public YDLayoutAnchorScheme(int anchor, Rectangle bounds)
    {
        this.anchor = anchor;
        this.oldBounds = bounds;
    }

    public YDLayoutAnchorScheme(int x, int y, int w, int h, int anchor)
    {
        this.anchor = anchor;
        this.oldBounds = new Rectangle(x, y, w, h);
    }

    public int getAnchor() {
        return anchor;
    }

    public Rectangle getOldBounds() {
        return oldBounds;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值