android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)

在做一个view背景特效的时候被坐标的各个获取方法搞晕了,几篇抄来抄去的博客也没弄很清楚。现在把整个总结一下。其实只要把下面这张图看明白就没问题了。涉及到的方法一共有下面几个:view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()view获取自身宽高:getHeight(),getWidth()motionEvent获取坐标:getX(),getY

大家好,又见面了,我是全栈君。

在做一个view背景特效的时候被坐标的各个获取方法搞晕了,几篇抄来抄去的博客也没弄很清楚。

现在把整个总结一下。

其实只要把下面这张图看明白就没问题了。

android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)

涉及到的方法一共有下面几个:

view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()

view获取自身宽高:getHeight(),getWidth()

motionEvent获取坐标:getX(),getY(),getRawX(),getRawY()

首先是view的几个方法,

获取自身的宽高的这两个方法很清楚,不用多说,获取坐标的这几个就有点混乱了。

根据上面的图应该会比较容易明白,图中屏幕上放了一个ViewGroup布局,里面有个View控件

getTop:获取到的,是view自身的顶边到其父布局顶边的距离

getLeft:获取到的,是view自身的左边到其父布局左边的距离

getRight:获取到的,是view自身的右边到其父布局左边的距离

getBottom:获取到的,是view自身的底边到其父布局顶边的距离

这些方法获取到的数据可以用在什么地方呢?

比如要实现一个自定义的特殊布局,像http://blog.csdn.net/singwhatiwanna/article/details/42614953

这里要实现的是一个水波纹特效布局,该布局内的任何控件点击后都会出现波纹效果

那么在点击了布局内的一个控件之后,就要通过不断刷新布局,去更新这个控件上面的波纹半径,为了节省资源,每次刷新布局都时候不会整个布局都刷新,而只是通过

postInvalidateDelayed(INVALIDATE_DURATION, left, top, right, bottom);  

在布局的画布上每次只去更新点击事件所点击的对应的控件的位置,那么这里就可以用view的那四个方法,分别获取自身的四条边对应的坐标

从而让布局去刷新重绘。

当然博客中是使用绝对坐标去计算的,因为这里实现的是一个布局,可能里面还会嵌套另外的布局,经过多次嵌套之后所获取到的值,是相对于控件直接对应的父布局(这个布局有可能已经是我们重写的布局的子布局了)的距离,这样去刷新的区域肯定是不准确的,所以博客里面使用相对屏幕的绝对坐标计算需要刷新的控件区域。

如果这里自定义的不是布局,而只是一个控件的话,就可以通过以上方法获取到坐标,然后要求自己所在的布局去重绘这一区域就可以了。当然这只是一种思路,其实没必要去要求布局重绘,完全可以直接view自身重绘就可以了。

然后是motionEvent的方法:

getX():获取点击事件相对控件左边的x轴坐标,即点击事件距离控件左边的距离

getY():获取点击事件相对控件顶边的y轴坐标,即点击事件距离控件顶边的距离

getRawX():获取点击事件相对整个屏幕左边的x轴坐标,即点击事件距离整个屏幕左边的距离

getRawY():获取点击事件相对整个屏幕顶边的y轴坐标,即点击事件距离整个屏幕顶边的距离

这些方法可以用在什么地方呢?

getRawX和getRawY在之前那篇博客里广泛使用了,可以去那里看用法,getX()和getY()这两个方法在对view进行自定义的时候可能用的会比较多。

之后有篇博客写开头实现的特效,可以看下,下面是链接。

view和view group重写

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121333.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 中级php面试题以及答案(net高级程序员面试题)

          博主最近找工作,记录了不少面试题,有些还是挺值的学习的,这里记录一下。有些我会给出参考链接,有些需要大家自己百度了,持续补充。。一、公司一1、php的接口和抽象类有什么区别,应用场景有哪些https://blog.csdn.net/hanxueyu666/article/details/75712917 https:…

    2022年4月16日
    65
  • JAVA 课程设计

     一、设计内容与设计要求1.课程设计目的:复习、巩固Java语言的基础知识,进一步加深对Java可视化程序设计的理解和掌握;课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;为后继课程的实验以及课程设计打下较扎实的基础。2.设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法…

    2022年4月7日
    51
  • 视觉里程计Visual Odometry(VO)「建议收藏」

    视觉里程计Visual Odometry(VO)「建议收藏」视觉里程计(VisualOdometry,简称VO)是SLAM技术中非常关键的部分,主要侧重于计算机视觉算法.视觉里程计这个术语借鉴了汽车的车轮里程计的概念,还是挺贴切的。我们知道汽车的车轮里程计是用来测量车速、行驶距离的测量装置。它的原理可以简单的做如下理解:汽车的车轮直径是已知的,那么车轮的周长也可以计算出来,都是一个恒定的值。车轮上安装有一个“计数器”,车轮每转动一圈就记一次数字,两次计数之间的时间也是可以测量的,因此根据车轮的周长和两次计数时间差…

    2022年6月18日
    29
  • 简单图文解释冯诺依曼体系结构(通俗易懂版)

    简单图文解释冯诺依曼体系结构(通俗易懂版)冯诺依曼式计算机主要由输入设备,输出设备,控制器,运算器,存储器该五个组成部分构成。我们可以将该体系结构的运作通过人类接收信息,处理信息,并输出信息这个过程来加以类比理解。人类:当眼睛看到某些信息,这些信息被存储到记忆装置,大脑从记忆装置取出信息,并加以思考运算,再放回记忆装置,大脑控制记忆装置将信息传输给嘴巴,将信息表达出来。(这个过程大脑的指令占领导地位)冯诺依曼计算机:当输入设备接收到数据,数据将被存储到存储器,控制器发出取数据和运算的指令,数据被取出方去放入运算器中加以运算,运算结束后,控制器

    2025年6月11日
    5
  • 4.4.2分类模型评判指标(一) – 混淆矩阵(Confusion Matrix)

    4.4.2分类模型评判指标(一) – 混淆矩阵(Confusion Matrix)简介混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。一句话解释版本:混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。数据分析与挖掘体系位置混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于…

    2022年5月14日
    54
  • linux命令行怎么结束进程,linux结束进程命令「建议收藏」

    linux命令行怎么结束进程,linux结束进程命令「建议收藏」linux下进程的开启与结束都可以通过命令来控制,下面由学习啦小编为大家整理了linux下结束进程命令的相关知识,希望对大家有所帮助。linux结束进程命令1.killkill[信号代码]根据PID向进程发送信号,常用来结束进程,默认信号为-9信号代码,可取值如下:-l[信号数字]显示、翻译信号代码-9,-KILL发送kill信号退出-6,-ABRT发送abort信号…

    2025年6月22日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号