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
网友评论