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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux查看jvm堆栈信息_linux查看线程堆栈

    linux查看jvm堆栈信息_linux查看线程堆栈pstack在linux上是一个非常有用的工具,可以查看进程内部调用函数的信息。可惜的是在ubuntu10.10版本中没有找到这个工具。无奈,只能下载尝试编译了。首先安装编译环境,使用如下命令:apt-getinstallbuild-essential#编译所需环境apt-getinstalldpkg-dev#dpkg编译所需环境apt-getbuild-deppstack…

    2025年11月17日
    4
  • Android游戏引擎选择[通俗易懂]

    Android游戏引擎选择[通俗易懂]Android游戏引擎选择今天在博客园看到一篇关于android游戏引擎的选择文章,特转载以便日后了解1.Ronkon(网站地址:http://www.ronkonandroid.com)如果不是想帮助作者解决一大堆兼容性问题的话还是不要使用这个引擎,我在上面浪费了1天半,就只是为了把实例程序跑起来。开始还以为是我水平菜,结果一堆人没跑起来,和我一样都是黑屏。虽然它文档做得好但我还是放弃了,本来Android平台兼容性就是老大难,在来个半吊子的引擎我可没本事搞定。2.AndEngine(网站地址:ht

    2026年1月21日
    6
  • puremvc的unity案例_游戏防闪退框架

    puremvc的unity案例_游戏防闪退框架作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名2.5中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接).参考资料[1]    PureMVC官方网站:www.puremvc.org[2]    Wikipedia:http://zh.wikipedia.org/zh-cn/MVC[

    2025年8月13日
    5
  • JavaSE 简单介绍

    JavaSE 简单介绍Java概述什么是Java?Java是SunMicrosystems于1995年首次发布的一种编程语言和计算平台。编程语言还比较好理解,那么什么是计算平台呢?Java是快速,安全和可靠的。从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java无处不在!Java主要分为三个版本Javase(J2SE)(Java2PlatformStandardEdition,java平台标准版Javaee(J2EE)(Java2Platform,EnterpriseEditi

    2022年7月7日
    69
  • ASP.netMVC文件下载

    ASP.netMVC文件下载ASP.netMVC文件下载ASP.netMVC下载文件一般有几种方法第一种:超链接方法,直接指向目标文件地址;window.open(“”); 标签href=“”;第二种:后台下载,但后台下载又有三种方式;(1)返回filestreampublicFileStreamResultdownload(){stringfileName=””;//客户端保存的文件名stringfilePath=Server.MapPath(“”);//路径…

    2022年7月27日
    5
  • AcWing 2060. 奶牛选美(双端队列BFS)

    AcWing 2060. 奶牛选美(双端队列BFS)题目描述 听说最近两斑点的奶牛最受欢迎 约翰立即购进了一批两斑点牛 不幸的是 时尚潮流往往变化很快 当前最受欢迎的牛变成了一斑点牛 约翰希望通过给每头奶牛涂色 使得它们身上的两个斑点能够合为一个斑点 让它们能够更加时尚 牛皮可用一个 N MN MN M 的字符矩阵来表示 如下所示 XXXX XXX XXXX XX XXXX XXX XXXXX XXX 其中 X 表示斑点

    2025年11月6日
    3

发表回复

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

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