博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android的View坐标学习
阅读量:7112 次
发布时间:2019-06-28

本文共 1470 字,大约阅读时间需要 4 分钟。

hot3.png

Android的View位置由四个顶点来决定,分别对应View的四个属性.left,top,right,bottom. 分别对应的左上角的x,y坐标和右下角的x,y坐标.注意这些坐标都是相对于该View的父容器来说的. 通过View的getLeft(),getRight()等获取相应的值. 同时View的getWidth()方法的源码如下:

/** * Return the width of the your view. * * @return The width of your view, in pixels. */@ViewDebug.ExportedProperty(category = "layout")public final int getWidth() {    return mRight - mLeft;}

getHeight()方法如下:

/** * Return the height of your view. * * @return The height of your view, in pixels. */@ViewDebug.ExportedProperty(category = "layout")public final int getHeight() {    return mBottom - mTop;}

而这里的四个变量mLeft,mTop,mRight,mBottom是在什么时候给赋值的呢? 就是在View的onLayout方法赋值的.因为在这个方法中通常会调用类似 view.layout(l,t,r,b)如下的代码. 这也就是为什么自定义view的时候在重写onLayout()方法时, 如果需要获取宽高,不能通过getWidth()获取 而是要通过getMeasuredWidth()去获取.因为在onLayout的是时候mRight,mLeft等变量还没有 被赋值呢.而getMeasuredWidth()这个方法的值是在onMeasure()方法中通过最终的 setMeasuredDimension()给设置进去的.

从Android3.0开始,View增加了几个参数x,y,translationX,translationY. 其中x,y是这个view的左上角的坐标.而translationX和translationY是这个View 的左上角相对于父容器的偏移量.并且translationX和translationY的默认值是0. x = left + translationX; y = top + translationY; 注意:在view平移的过程中,top和left表示的是原始左上角的位置信息. 这个两个值并不会发生改变.发生改变的是x,y,translationX和translationY.

注意这里说的是平移.平移是什么呢?就是通过propertyAnimation去改变View的位置

但是发现如果通过LayoutParams的leftMargin等属性去改变一个view的位置的时候. getLeft()的值是会变化的. 这里要注意.

关于MotionEvent的getX()和getRawX()

getX()获取的是当前点击事件的位置距离所在View的左边界的水平位移值; getRawX()后去的是当前点击事件的位置距离屏幕左上角的水平位移值.

转载于:https://my.oschina.net/tanghaoo/blog/651661

你可能感兴趣的文章
boost::asio 协程问题
查看>>
给ImageView添加触发效果
查看>>
我的友情链接
查看>>
iOS常用的第三方库以及XCode插件
查看>>
效果1: 三年以来再一次接触JS,比较蛋疼的日期开始了。
查看>>
SQL
查看>>
smarty---为自己的应用程序设置目录
查看>>
SQL语句中where 1=1的基本用法
查看>>
SSDT Hook的妙用-对抗ring0 inline hook
查看>>
什么是交换机端口镜像及其工作原理
查看>>
ubuntu 安装 Wireshark
查看>>
java fatal error log
查看>>
安装OpenKM
查看>>
SQL SERVER 正则替换
查看>>
一个PHP小程序
查看>>
Echarts 动态获取数据进行图表的展示
查看>>
ansible命令基础
查看>>
【转】LINUX-APACHE服务的配置
查看>>
LVM的管理命令
查看>>
安装WSUS服务器
查看>>