View之坐标体系

2019-12-17  本文已影响0人  钦_79f7

View关于坐标方法系列

相对坐标系列

MotionEvent 系列方法

View 系列方法

绝对坐标系列

以屏幕的左上角为坐标原点

View系列方法

MotionEvent 系列方法

测试案例

机型信息如下:

device_info.png

布局文件View位置

<RelativeLayout
    android:layout_marginTop="100px"
    android:id="@+id/revenue_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="15px">

    <TextView
        android:id="@+id/tv_balance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="余额:0 元"
        android:textSize="12dp" />

    <TextView
        android:id="@+id/tv_profit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="据历史收益可得:0.00 元"
        android:textSize="12dp" />

</RelativeLayout>

预览截图如下:

xml_preview.png

onResume()中执行结果:

location_onresume.png

onResume中并没有获取到View坐标信息

onWindowFocusChanged()中执行结果:

activity 应用全屏主题(NoTitle)

location_notitle.png

activity 为应用全屏主题(有actionbar)

location_actionbar.png

从上述两个运行结果来看,getLocationInWindow()与getLocationOnScreen()并未存在差异。

其中tvBalance的position [15,169],Y坐标169是100(revenueLayout的margin)+15(revenueLayout的padding)+54(状态栏status bar的高度,此值是反推出来的)。由此就可以看出获取的确实是View的绝对坐标。

而对于应用非全屏(NoTitle)主题的结果,position [15,337],恰好就是多出了一个actionbar的高度,即337-169 = 168。而168恰好满足56*3(density),这里就看到了,在系统默认的配置下当前的屏幕宽度下,actionbar的高度为56dp,当前的density恰好是3.0,而换算成px就是168。到了这里,整个测试结果就完全验证了,上述方法的解释。

备注:

参考

上一篇 下一篇

猜你喜欢

热点阅读