android里View设置Gravity的深度解析之位运算
颜骁
2023-12-01
在阅读别人的源码时,有时发现,在代码中view.setGravity中,参数可以是Gravity.Left+Gravity,Top,看上去确实没毛病,但仔细想想,为什么可以这么定义呢?看了源码查了资料,现在就可以得出结论了:
1.此处采取位运算的形式,将值转化为二进制,通过计算机原理,1为true,0为false.不懂搜索百度:位运算,补补基础
2.android文档参考方便研究:http://www.android-doc.com/reference/android/view/Gravity.html#RIGHT
相反值的定义:Gravity.Top和Gravity.Bottom,Gravity.Left和Gravity.Right等等,top=48,bottom=80,二进制为top='11'0000
bottom='101'0000,从右到左看,top取两位11,bottom取三位101,右到左,最右的一位都是1,则表示上下的标记位为1(true),而top的第二位为1,则表示设置为top为true,如果是0的话则不设置(false),而bottom的第三位为1为true,设置为bottom标记,同理,left和right都是一样,大家可以试试.
3.组合的原理:example:Gravity.Left+Gravity,Top,left=3,top=48,二进制和为110011,右往左前两位表示left,中间两位表示其他标记,最后两位表示top看到这里,应该有些线索发现了吧?
4.总结:android仅仅通过一个二进制数就可以获取多个Gravity组合,其原因在于不同位数代表不同标记位,可以利用一个二进制数同时对多个标记位进行判断,第2或3位是作为一个左右标记位,第4或5位作为另一标记位,以此类推,在这里android源码太复杂,这样简单论述比较好理解.