android之View坐标系(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://www.cnblogs.com/Free-Thinker/p/8920595.html
android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)相关推荐
- python通过api获取数据_在一次点击PythonRequests中从API获取所有数据
import requests url = 'http://www.justdial.com/autosuggest.php?' param = { 'cases':'popular', 'strtl ...
- Windows下C/C++模拟鼠标点击,PC端没有鼠标设备也能够获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件,方法一 亲测有效
------- [ 转载请保留 ] ------- 作者:西_瓜_瓜 博客:https://blog.csdn.net/xi_gua_gua/article/details/105773298 --- ...
- Android ---------高德卫星地图绘制多个点和点的点击事件自定义弹窗
最近开发中,遇到一个多个点绘制,并实现点击事件,出现自定义窗口显示相关信息等功能,所以写了这篇博客. 从后台请求数据,得到多个经纬度,然后绘制在地图上,并实现点击,出现相关信息(自定义弹框实现) 先来 ...
- android app 主界面,android ViewPager实现App主界面Tab菜单页面切换和点击事件
Tabhost实现页面滑动切换比较麻烦,这里介绍一下viewPage 控件. 实现了三屏滑动带标题点击和tab页面内按钮的的点击事件实现: viewPage 的优点是可以滑动切换缺点是MainAct ...
- android按钮点击toast,关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?...
此文末参考链接: 此段代码的教程以及使用接口的方式.switch语句的教程链接为链接1. 汇总里说的有更多的实现方法,为链接2. 文中链接为视觉统一,链接均于文末,以上为方便文中跳转,加了文中的跳转链 ...
- android高德地图多个mark点击,Android ---------高德卫星地图绘制多个点和点的点击事件自定义弹窗...
最近开发中,遇到一个多个点绘制,并实现点击事件,出现自定义窗口显示相关信息等功能,所以写了这篇博客. 从后台请求数据,得到多个经纬度,然后绘制在地图上,并实现点击,出现相关信息(自定义弹框实现) 先来 ...
- Android TextView设置自动识别的超链接字体颜色,及自身点击事件无响应的解决办法
前言 我们在给TextView设置超链接的时候,可能最简单的,Android已经给出了一个非常的简单的做法就是: 在xml中设置: <!--all表示匹配所有,web表示匹配网址 --> ...
- C#中获取程序当前路径的方法[转]2011-10-25 15:40C#中获取程序当前路径的方法
System.Diagnostics命名空间 string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件 ...
- python中用于获取用户输入的函数是_在Python中,用于获取用户输入的函数是.
在Python中,用于获取用户输入的函数是. 答:input() 关于新生儿生理性体重下降的恢复时间,下列正确的是出生后 答:7~10天 中国大学MOOC: 未来城市只有同时具备下列哪几个组成部分,才 ...
最新文章
- 网络服务-SAMBA
- 如何解决秒杀的性能问题和超卖的讨论 及防止按钮多次点击
- 蛤玮学计网 -- 简单的判断ip
- 离线安装Eclipse的Color theme plugin
- 如何进行正确的SQL性能优化
- win7 网络打印机 未授予用户在此计算机上的请求登录类型,Win7提示未授予用户在此计算机上的请求登录类型...
- JQ实现王者荣耀手风琴效果
- 将Excel文件数据导入到SqlServer数据库的三种方案
- php 数组 utf8,PHP数组编码gbk与utf8互相转换的两种方法实例分享
- python分页PDF
- 360浏览器怎么开java_360安全浏览器怎么打开javascript
- 为什么要切换IP地址?
- Selenium认识与实战(学习版)
- asp.net pdf如何转换成tif_如何将pdf转换成word?它可以解决大多数文档转换问题
- js 手机或者座机电话号码验证
- charles证书下载
- 幼儿园数学目标_幼儿园数学活动目标的制定
- vue中使用layui实现树形菜单增删改查功能
- 算法笔记:Playing Atari with Deep Reinforcement Learning
- 天玑9000和高通骁龙870哪个好