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

如今把整个总结一下。

事实上仅仅要把以下这张图看明确就没问题了。

涉及到的方法一共同拥有以下几个:

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

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

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

首先是view的几个方法,

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

依据上面的图应该会比較easy明确,图中屏幕上放了一个ViewGroup布局,里面有个View控件

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

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

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

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

这些方法获取到的数据能够用在什么地方呢?
比方要实现一个自己定义的特殊布局,像http://blog.csdn.net/singwhatiwanna/article/details/42614953
这里要实现的是一个水波纹特效布局,该布局内的不论什么控件点击后都会出现波纹效果

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

[java] view plaincopyprint?
  1. 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/blfshiye/p/5254682.html

Andropid自己定义组件-坐标具体解释相关推荐

  1. Android自己定义组件系列【6】——进阶实践(3)

    上一篇<Android自己定义组件系列[5]--进阶实践(2)>继续对任老师的<可下拉的PinnedHeaderExpandableListView的实现>进行了分析,这一篇计 ...

  2. Android自己定义组件系列【4】——自己定义ViewGroup实现双側滑动

    在上一篇文章<Android自己定义组件系列[3]--自己定义ViewGroup实现側滑>中实现了仿Facebook和人人网的側滑效果,这一篇我们将接着上一篇来实现双面滑动的效果. 1.布 ...

  3. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  4. Vue---自定义组件

    一.组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能. ...

  5. Vue.js 定义组件模板的七种方式

    转载自  Vue.js 定义组件模板的七种方式 在 Vue 中定义一个组件模板,至少有七种不同的方式(或许还有其它我不知道的方式): 字符串 模板字面量 x-template 内联模板 render ...

  6. [vue] 写出多种定义组件模板的方法

    [vue] 写出多种定义组件模板的方法 1.字符串 2.模板字面量 3.<script type="x-template"></script> 4.文件组件 ...

  7. Android开发:WGS-84、GCJ02坐标名词解释及坐标转换

    WGS-84.GCJ02坐标名词解释及坐标转换 目录 一.什么是WSG-84坐标系? 二 .什么是GCJ-02坐标系? 三.GCJ-02坐标系使用场景 四.函数说明 五.工具类代码 注:本文仅包含国测 ...

  8. 【愚公系列】2022年10月 微信小程序-优购电商项目-⾃定义组件传参

    文章目录 前言 一.id和data-xxx传参 二.导航传值 三.父子组件传值 前言 组件传参是小程序中非常重要的一个功能,因为小程序大多都是组件形式存在的. 一.id和data-xxx传参 view ...

  9. Vue相关面试问答TOP2(能不能在method中使⽤箭头函数、如何定义组件的data、v-if 和 v-show的区别、computed、watch、methods的区别、axios的特点....)

    1.能不能在method中使⽤箭头函数?               理论上可以使⽤,但是我不会使⽤,因为箭头函数中的this的指向与⼀般函数不同 ⼀般函数执⾏调⽤ 它的对象              ...

最新文章

  1. web项目数据存入mysql数据库中文乱码问题
  2. 网民关注iPhone、Google、微软和安全
  3. Spring boot嵌入式Servlet容器定制器
  4. deinstall 卸载grid_oracle 11g RAC手动卸载grid,no deinstall   .
  5. 液体火箭发动机技术国家级重点实验室2021年度对外开放项目指南
  6. JS作用域链(转载)
  7. php让符合条件的复选框选中,多条件查询(复选框条件)
  8. python 按日期筛选数据并计算均值
  9. Tomcat-日志格式配置
  10. [Java] Appfuse tapestry 小记
  11. ArcGIS Pro建立三维模型(三维渲染)
  12. python中求和符号怎么打_SymPy求和表达式中的代换符号
  13. 微信发个原图,居然隐私曝光这么多…可怕
  14. 云真机手机测试平台,能帮我们解决什么问题
  15. [千峰安全篇9]Public Key Infrastructure
  16. 状态机练习(饮料贩卖机程序设计)8/9
  17. android+tv+社区,Android TV Overscan
  18. python爬取豆瓣代码_python爬取豆瓣
  19. ​蔚来高速换电站,大家还没看懂的护城河
  20. 《Image-to-Image Translation with Conditional Adversarial Networks》文章翻译

热门文章

  1. VC6安装错误——Error Launching acmboot.exe
  2. Vue3的响应式原理解析
  3. 前端导出文件,后端返回文件流过大直接干崩溃
  4. Python之路【第十七篇】:装饰器
  5. cisco 动态路由协议RIP笔记
  6. 深入剖析授权在WCF中的实现[共14篇]
  7. 超简单调整Fedora25遇到的字体小问题——字体渲染问题和输入框内容显示不全...
  8. html5之web worker
  9. 完整国内城市js级联选择
  10. mysql配置文件注解