Android 一个小例子理解实际开发中坐标计算的过程
2016-05-12 17:26
501 查看
今天阅读源码时遇到一个计算坐标的梗了,一时之间没看懂为何这么计算,最后通过自己的计算才理解,Google把源码写的越来越抽象了,理解起来也是越来越伤脑细胞了,下面通过一个简单计算坐标的例子来熟悉下;
上图显示元素说明:
白色区域是手机屏幕,黄色区域是一个ViewGroup,紫色区域是ViewGroup里面嵌套的一个View
情景1:已知黄色区域的(X1,Y1)和(X2,Y2)坐标,如何计算黄色区域的中心点坐标?
计算坐标:
黄色区域Rect坐标表示:(X1,Y1,X2,Y2)
黄色区域的大小:宽度Width1=X2-X1 高度Height1=Y2-Y1
黄色区域X轴方向的中心点坐标:
计算公式:X1+Width1/2
=X1+ (X2-X1)/2
=X1+X2/2 -X1/2
=X2/2+X1/2
=(X2+X1)/2
即:
黄色区域X轴方向的中心点坐标=(X2+X1)/2
同样的原理计算,黄色区域Y轴方向的中心点坐标=(Y2+Y1)/2
黄色区域的中心点坐标公式:( (X2+X1)/2 , (Y2+Y1)/2 )
PS:请记住这个中心点坐标公式 ,常会用到。
这也就Rect.java里面的centerX()和centerY()方法这么表示的原因(右移一位也就是除以2的意思):
情景2:
已知黄色区域的(X1,Y1)和(X2,Y2)坐标,和紫色区域的宽度xWidth和高度yheight,如何使紫色区域最终绘制在黄色区域的中心位置?
根据情景1得知:黄色区域的中心点坐标是:( (X2+X1)/2 , (Y2+Y1)/2 )
紫色区域的X3=黄色区域的X轴中心点-紫色区域的宽度/2
=(X2+X1)/2 - xWidth/2
=(X2+X1-xWidth) /2
紫色区域的Y3=黄色区域的Y轴中心点-紫色区域的高度/2
=(Y2+Y1)/2- yheight/2
=(Y2+Y1-yheight)/2
X4=X3+xWidth
Y4=Y3+yheight
有了坐标,从哪里绘制也就知道了
上述例子很简单,主要是了解计算坐标的过程。
上图显示元素说明:
白色区域是手机屏幕,黄色区域是一个ViewGroup,紫色区域是ViewGroup里面嵌套的一个View
情景1:已知黄色区域的(X1,Y1)和(X2,Y2)坐标,如何计算黄色区域的中心点坐标?
计算坐标:
黄色区域Rect坐标表示:(X1,Y1,X2,Y2)
黄色区域的大小:宽度Width1=X2-X1 高度Height1=Y2-Y1
黄色区域X轴方向的中心点坐标:
计算公式:X1+Width1/2
=X1+ (X2-X1)/2
=X1+X2/2 -X1/2
=X2/2+X1/2
=(X2+X1)/2
即:
黄色区域X轴方向的中心点坐标=(X2+X1)/2
同样的原理计算,黄色区域Y轴方向的中心点坐标=(Y2+Y1)/2
黄色区域的中心点坐标公式:( (X2+X1)/2 , (Y2+Y1)/2 )
PS:请记住这个中心点坐标公式 ,常会用到。
这也就Rect.java里面的centerX()和centerY()方法这么表示的原因(右移一位也就是除以2的意思):
情景2:
已知黄色区域的(X1,Y1)和(X2,Y2)坐标,和紫色区域的宽度xWidth和高度yheight,如何使紫色区域最终绘制在黄色区域的中心位置?
根据情景1得知:黄色区域的中心点坐标是:( (X2+X1)/2 , (Y2+Y1)/2 )
紫色区域的X3=黄色区域的X轴中心点-紫色区域的宽度/2
=(X2+X1)/2 - xWidth/2
=(X2+X1-xWidth) /2
紫色区域的Y3=黄色区域的Y轴中心点-紫色区域的高度/2
=(Y2+Y1)/2- yheight/2
=(Y2+Y1-yheight)/2
X4=X3+xWidth
Y4=Y3+yheight
有了坐标,从哪里绘制也就知道了
上述例子很简单,主要是了解计算坐标的过程。
相关文章推荐
- Android学习--《数据的保存》
- android动画入门
- 怎么去除android listview的默认点击效果
- 用Android访问本地站点---(localhost,10.0.2.2)要区别
- android 存取数据。
- 安卓系统权限申请列表
- android 常用util方法
- 条形码、二维码扫一扫和生成二维码采用ZXing3.0开源库在android studio中实现
- Android双击back键退出程序
- Android的Button按钮,ACTION_UP事件不触发解决方案
- android Looper源码分析
- Android之Service与IntentService的比较
- Android DrawerLayout 高仿QQ5.2双向侧滑菜单
- android studio
- Activity设置android:windowIsTranslucent属性之后,点击按钮跳转到其他的Activity
- 控制父控件不可拦截子控件事件
- (android:windowIsTranslucent)影响(android:windowAnimationStyle)Activity切换动画无效
- 工作android笔记 1:删除apk,2修改系统权限,3logcat打印出自己的信息,4mac用vi修改环境变量
- Android Studio gradle 配置 keystore
- ListView与ScrollView冲突解决方法