通过控制Button移动来学习Android坐标

通过控制Button移动来学习Android坐标

ID:40503471

大小:1.69 MB

页数:13页

时间:2019-08-03

通过控制Button移动来学习Android坐标_第1页
通过控制Button移动来学习Android坐标_第2页
通过控制Button移动来学习Android坐标_第3页
通过控制Button移动来学习Android坐标_第4页
通过控制Button移动来学习Android坐标_第5页
资源描述:

《通过控制Button移动来学习Android坐标》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、小Demo大知识-通过控制Button移动来学习Android坐标今天分享一个简单的Demo。Demo实现的功能就是,用鼠标点中button的时候,然后拖动Button。这时候Button会根据你鼠标的移动而移动,同时,你鼠标点中的Button的位置也不会改变。比如你点在Button的左上角,那移动的时候。作者:青蛙要fly来源:安卓巴士Android开发者门户

2、2017-01-1117:38 收藏  分享今天分享一个简单的Demo。Demo实现的功能就是,用鼠标点中button的时候,然后拖动Button。这时候Button会根据你鼠标的移动而移动,同时,你鼠标点中的Button的位

3、置也不会改变。比如你点在Button的左上角,那移动的时候。鼠标还是在Button的左上角一言不合上效果图大家不要介意上面那么模糊的gif图,毕竟我是用手机拍的。(介意你又能拿我怎么办。哈哈)我们先来打个预防针,先学习基本的知识点:涉及到的方法一共有下面几个:·view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()·view获取自身宽高:getHeight(),getWidth()·motionEvent获取坐标:getX(),getY(),getRawX(),getRawY()1.view获取自身坐标如上图所以,绿色区域的父视图是黄色

4、区域,所以left是55,top是55。黄色区域的父视图是蓝色区域,所以left是60,top是115。2.view获取自身宽高没错。从字面意思看就能理解,就是获取View的宽高。这里提到一个以前遇到的一个问题,就是在Activity中有时候获取某个View的width和height会为0。3.motionEvent获取坐标·getX():获取点击事件相对控件左边的x轴坐标,即点击事件距离控件左边的距离·getY():获取点击事件相对控件顶边的y轴坐标,即点击事件距离控件顶边的距离·getRawX():获取点击事件相对整个屏幕左边的x轴坐标,即点击事件距离整个屏幕左边的距离·getRa

5、wY():获取点击事件相对整个屏幕顶边的y轴坐标,即点击事件距离整个屏幕顶边的距离所以当我们用鼠标点击Button中间时候,那这时候getX()就是我们鼠标点击的位置与Button左边边界的距离。getY()就是点击的位置与Button顶边边界的距离。其实设置Button跟着鼠标滑动,很简单,就是在鼠标滑动的时候,重新设置Button的x和y坐标。即使用setX()和setY()。这时候就有问题了。那二个方法中该填入的值是多少呢。让我们画个图来看下就知道了。首先我们比如对一个Button设置setX(200),setY(200),这时候是如下图所示这样:所以实际上对一个Button设置

6、setX(m),setY(n),实际上是这个Button的左上角的坐标为(m,n)。所以我们在拖动的时候不能简单的把我们点击的X和Y坐标传过去。 如上图所示,假如我们点中红色的区域,来准备移动这个Button,并且鼠标移动了绿色区域那个地方,那么这个Button也会移到图上所示那样。这样才是我们所期望的样子。但是如果单纯把绿色区域的X和Y坐标传过去,让Button来进行setX和setY。则会出现如下那个Button所示位置。所以发现比我们期望的位置更靠右边及下边了。  这时候我们发现多的位置正好是绿色区域在这个Button内部中相对位置的X和Y坐标。这下我们是不是就想到,对Butto

7、n设置setX(getRawX()-getX())和setY(getRawY()-getY()),如果这时候你已经这么想到了。恭喜你,你已经距离最后的成功差一小步了。当你高兴的这么写后,你会发现你移动后的Button总是在鼠标点击的下方。你会发现。X轴的的确已经正确了。但是Y轴还是错误。如下图所示: 这时候你一定会问,WHY???原来这么分析是没问题的。But这个我们前面的假设都是在这个坐标系中,但是这个坐标系的位置在哪里??? 错误原因:因为我们调用的getRawY()方法获取到的是屏幕左上角到我们点的区域的Y轴的距离,也就是以蓝色坐标系来做参考。而我们对Button设置setY()

8、方法的时候是绿色区域的左上角到我们点的区域的Y轴距离,也就是以红色坐标系来做参考。所以我们知道了。我们在Y轴上还要减去状态栏的高度及应用标题栏的高度才可以。那么又有新的问题了。如何获取状态栏的高度,和应用标题栏的高度:获取状态栏高度1.int statusBarHeight = -1;   2.//获取status_bar_height资源的ID   3.int resourceId = getResources().getIdentifier

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。