MeasureSpec测量

2018-11-16  本文已影响0人  十叶一支花

MeasureSpec的Mode:Exactly、AT_MOST、unspecified。

用32位表示,高3位表示Mode,低30位表示Size。

private static final int MODE_SHIFT =30; //一个int四字节,32位。

private static final int MODE_MASK =0x3 << MODE_SHIFT;
00000000 00000000 00000000 00000011 <<30得到
11000000 00000000 00000000 00000000;

public static final int UNSPECIFIED =0 << MODE_SHIFT;
0左移30位?结果还是0,为啥要左移30位?
00000000 00000000 00000000 00000000 ;

public static final int EXACTLY =1 << MODE_SHIFT;
00000000 00000000 00000000 00000001 << 30得到
01000000 00000000 00000000 00000000 ;

public static final int AT_MOST =2 << MODE_SHIFT;
00000000 00000000 00000000 00000010 << 30得到
01000000 00000000 00000000 00000000 ;

··· public static int makeMeasureSpec(int size, int mode) {
return (size & ~MODE_MASK) | (mode & MODE_MASK);
}

    public static int getMode(int measureSpec) {
        return (measureSpec & MODE_MASK);
    }
    
    public static int getSize(int measureSpec) {
        return (measureSpec & ~MODE_MASK);
    }

···
高2位:
未定义UNSPECIFIED:00
精确EXACTLY:01
最多AT_MOST:10

使用都用到MODE_MASK:
11000000 00000000 00000000 00000000

上一篇 下一篇

猜你喜欢

热点阅读