美文网首页
MeasureSpec测量

MeasureSpec测量

作者: 十叶一支花 | 来源:发表于2018-11-16 10:25 被阅读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

    相关文章

      网友评论

          本文标题:MeasureSpec测量

          本文链接:https://www.haomeiwen.com/subject/dqupfqtx.html