MeasureSpec计算解释

今天一个朋友问我MeasureSpec的具体含义,我解释说是位运算,并举例说明,记录如下,希望对大家有所帮助。

private static final int MODE_SHIFT = 30;

private static final int MODE_MASK = 0x3 << MODE_SHIFT;

public static final int UNSPECIFIED = 0 << MODE_SHIFT;

public static final int EXACTLY = 1 << MODE_SHIFT;

public static final int AT_MOST = 2 << MODE_SHIFT;

位运算

MODE_MASK :1100 0000 0000 0000

UNSPECIFIED:0000 0000 0000 0000

EXACTLY:0100 0000 0000 0000

AT_MOST:1000 0000 0000 0000

函数:

@IntRange,0<=size<= 1<<30 -1

剩下就是位运算了。

比如:

我们设定 size 为 15px,那么  size 的二进制为 0000 0000 0000 1111

mode为 AT_MOST:1000 0000 0000 0000

makeMeasureSize(size,mode):结果为

0000 0000 0000 1111

+

1000 0000 0000 0000

=

measureSpace:1000 0000 0000 1111


getSize(measureSpace)

measureSpace:1000 0000 0000 1111

MODE_MASK :1100 0000 0000 0000

~MODE_MASK :0011 1111 1111 1111


1000 0000 0000 1111

&

0011 1111 1111 1111

=

0000 0000 0000 1111

即 size = 15


getMode(measureSpace)

measureSpace:1000 0000 0000 1111

MODE_MASK :1100 0000 0000 0000

1000 0000 0000 1111

&

1100 0000 0000 0000

=

1000 0000 0000 0000

即 2 << 30

你可能感兴趣的:(MeasureSpec计算解释)