首页 > 其他分享 >Android 中如何正确获取 View 坐标位置(看了就懂)

Android 中如何正确获取 View 坐标位置(看了就懂)

时间:2022-08-24 21:57:43浏览次数:93  
标签:int 坐标 location globalRect Android View view

在我们 Android 开发过程中经常使用到获取 View 坐标的方式做相关的逻辑判断,主要是用到一下几种方法:

  1. getLeft()、getTop()、getRight()、getBottom()

  2. getX()、getY()、getRawX()、getRawY()

  3. getLocationOnScreen()

  4. getLocationInWindow()

  5. getGlobalVisibleRect()

  6. getLocalVisibleRect()

方式 1:getLeft()、getTop()、getRight()、getBottom()

1. 应用场景

获得 View 相对 父 View 的坐标

2. 使用

view.getLeft();

view.getTop();

view.getRight();

view.getBottom();

3. 具体描述

View 的位置由 4 个顶点决定的(如下 A、B、C、D)

4 个顶点的位置描述分别由 4 个值决定:(请记住:View 的位置是相对于父控件而言的)

方式 2:getX()、getY()、getRawX()、getRawY()

1. 应用场景

获得点击事件处 相对点击控件 & 屏幕的坐标

2. 使用

该方式是通过 motionEvent 获取的

motionEvent event;

event.getX();

event.getY();

event.getRawX();

event.getRawY();

3. 具体介绍

方式 3:getLocationInWindow()

1. 应用场景

获取控件 相对 窗口 Window 的位置

2. 具体使用

int[] location = new int[2];

view.getLocationInWindow(location);

int x = location[0]; // view 距离 window 左边的距离(即 x 轴方向)

int y = location[1]; // view 距离 window 顶边的距离(即 y 轴方向)

// 注:要在 onWindowFocusChanged()里获取,即等 window 窗口发生变化后

3. 示意图

方式 4:getLocationOnScreen()

1. 应用场景

获得 View 相对 屏幕 的绝对坐标

2. 使用

int[] location = new int[2];

view.getLocationOnScreen(location);

int x = location[0]; // view 距离 屏幕左边的距离(即 x 轴方向)

int y = location[1]; // view 距离 屏幕顶边的距离(即 y 轴方向)

// 注:要在 view.post(Runable)里获取,即等布局变化后

3. 示意图

方式 5:getGlobalVisibleRect()

1. 应用场景

View 可见部分 相对于 屏幕的坐标。

2. 具体使用

Rect globalRect = new Rect();

view.getGlobalVisibleRect(globalRect);

globalRect.getLeft();

globalRect.getRight();

globalRect.getTop();

globalRect.getBottom();

3. 示意图

方式 6:getLocalVisibleRect()

1. 应用场景

View 可见部分 相对于 自身 View 位置左上角的坐标。

2. 具体使用

Rect localRect = new Rect();

view.getLocalVisibleRect(localRect);

localRect.getLeft();

localRect.getRight();

localRect.getTop();

localRect.getBottom();

3. 示意图

总结

本文对 Android 获取 View 坐标位置的方式进行了全面讲解,总结如下:

参考 https://blog.csdn.net/carson_ho/article/details/103342511

标签:int,坐标,location,globalRect,Android,View,view
From: https://www.cnblogs.com/mahongyin/p/16622400.html

相关文章

  • DES加密解密:android、java、js
    需求:登录的时候WEB或APP将数据加密后传给JAVA后端,后端接收到数据解密后得到数据进行处理。eg:明文:12345678密文:PofrPuMcG5CiXuyR5B5ysQ==一、java端importjavax.cr......
  • Android 学习笔记1
    Android学习笔记1需求:1.按钮响应、文本更新2.动态注册广播,实现接收系统分钟广播,跳转界面3.在子线程中实现倒计时1分钟4.将Activity与Service绑定、解绑,开关Service服......
  • 直播电商平台开发,android cardview 取消阴影,高度
    直播电商平台开发,androidcardview取消阴影,高度 <androidx.cardview.widget.CardView      app:cardBackgroundColor="@color/white"      an......
  • PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏
    一:背景C#程序内存泄漏的诱发因素有很多,但从顶层原理上来说,就是该销毁的用户根对象没有被销毁,从而导致内存中意料之外的对象无限堆积,导致内存暴涨,最终崩溃,这其中的一个......
  • kkfileview在线预览文件
    kkfileview在线预览码云下载地址:https://gitee.com/kekingcn/file-online-preview/releaseswindows版kkFileView-4.0.0.zip修改启动文件原:@echooffset"KKFILEVI......
  • [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
    [Android开发学iOS系列]工具篇:Xcode使用和快捷键工欲善其事必先利其器.编辑Cmd+N:新建文件Option+Cmd+N:新建文件夹Cmd+/:注释Ctrl+I:formatind......
  • Android各个版本的主要新特性
    5.0新特性—2014年(Lollipop)全新的MaterialDesign设计风格。支持64位ART虚拟机。放弃了之前一直使用的Dalvik虚拟机,改用了ART虚拟机,实现了真正的跨平台编译。(todo:弄......
  • Android中Handler的使用
    为什么使用Handler?handler用来实现Android线程的异步操作,Android只允许UI线程修改界面。Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以发消息,也可......
  • Android最新微信支付总结
    签名和包名,签名的话:用release。关于上线:非硬性指标。1.申请appid提交应用,等待审核。只有审核通过后,才能有开发资格。支付认证费:300元/年。每年需要认证一次。2.下载sdk......
  • workbench小技巧——结合paraview
    workbench计算完结果后,可以在计算完成的Temperature(或者其他的结果也可以)右键->Export...->STLFile将其保存成文.stl格式的文件,并且如果在workbench中是半剖视图,那么生成......