android里View设置Gravity的深度解析之位运算
来源:互联网 发布:易语言中文编程 编辑:程序博客网 时间:2024/05/16 06:45
在阅读别人的源码时,有时发现,在代码中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源码太复杂,这样简单论述比较好理解.
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源码太复杂,这样简单论述比较好理解.
1 0
- android里View设置Gravity的深度解析之位运算
- android里View设置Gravity的深度解析之位运算
- android中设置view控件的gravity
- <Android 进阶(三)> 自定义View之支持Gravity的ViewGroup
- 编码设置FrameLayout子View的layout_gravity,gravity
- android Gravity 类解析
- 深度解析android.support.v4.view.NestedScrollingParentHelper类的源码
- Android ViewGroup与View里的onMeasure解析
- Android里用代码设置View的相关属性
- Android里用代码设置View的相关属性
- 关于android中layout_gravity和gravity对View的影响
- android之layout_gravity和gravity的区别
- Android 之 View透明度的设置
- jdk之BitSet位运算解析
- Android之android:layout_gravity和android:gravity的区别
- Android之android:layout_gravity和android:gravity属性的区别
- android之View坐标解析
- android的gravity
- JS实现打开链接的功能
- Maven+druid+MyBatis+Spring+Oracle+Dubbo开发环境搭建
- Perfmon
- [ASP.NET] 修改web站点的默认编程语言
- Angular-Vue-React
- android里View设置Gravity的深度解析之位运算
- effect C++ 在operatro = 中处理“自我赋值”
- JSP+Servlet实现文件上传及下载案例
- Nosql 理解篇+实战篇 五 NoSQL一致性解决方案
- 希尔排序
- SpringMVC-接收请求参数和页面传参
- 02:最大子矩阵
- 水平进度条
- Remove Nth Node From End of List