在Android中将子View的坐标转换为父View的坐标
16lz
2022-08-06
在Android中,我们有时候可能会将子View的坐标转换为父View中的坐标。 在Launcher中有这么一段代码可以完成这项工作。 publicfloatgetDescendantCoordRelativeToSelf(Viewdescendant,int[]coord){ floatscale=1.0f; float[]pt={coord[0],coord[1]}; //坐标值进行当前窗口的矩阵映射,比如View进行了旋转之类, // 它的坐标系会发生改变。map之后,会把点转换为改变之前的坐标。这个地方很关键 descendant.getMatrix().mapPoints(pt); //转换为直接父窗口的坐标 scale*=descendant.getScaleX(); pt[0]+=descendant.getLeft(); pt[1]+=descendant.getTop(); ViewParentviewParent=descendant.getParent(); //循环获得父窗口的父窗口,并且依次计算在每个父窗口中的坐标 while(viewParentinstanceofView&&viewParent!=this){ finalViewview=(View)viewParent; view.getMatrix().mapPoints(pt); scale*=view.getScaleX();//这个是计算X的缩放值。此处可以不管 //转换为相当于可视区左上角的坐标,scrollX,scollY是去掉滚动的影响 pt[0]+=view.getLeft()-view.getScrollX(); pt[1]+=view.getTop()-view.getScrollY(); viewParent=view.getParent(); } coord[0]=(int)Math.round(pt[0]); coord[1]=(int)Math.round(pt[1]); returnscale; }
其中, descendant 是子View, coord是在 descendant中的坐标值。而这个函数是父View的函数。当然,我们可以可以加一个 参数,指定父View。
其中, descendant 是子View, coord是在 descendant中的坐标值。而这个函数是父View的函数。当然,我们可以可以加一个 参数,指定父View。
更多相关文章
- android上一些方法的区别和用法的注意事项
- Android(安卓)--- Activity生命周期
- 锁屏界面
- android 零星调试笔记
- 从 Android(安卓)Sample ApiDemos 中学习 android.animation API
- Android常用控件
- Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
- SlidingMenu和ActionBarSherlock结合做出出色的App布局,Facebook
- android上一些方法的区别和用法的注意事项