android view取坐标点,Android 获取子 View 的位置及坐标的方式
一、View
1.1、View 概述
视图 (View) 是一个容器,专门负责布局。表现为显示在屏幕上的各种视图,如 TextView、LinearLayout 等。
1.2、View 分类
View 主要分为两类,具体如下表格所示:类别示例特点单一视图即一个 View,如 TextView、EditText不包含子View
视图组即多个 View 组成的 ViewGroup,如 RelativeLayout包含子View
1.3、View 类简介View 类是 Android 中各种组件的基类;
View 的构造函数有四个,具体如下所示:public View(Context context) {
}
public View(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
}
源码中 View 的构造函数
通过源码的注释我们可以看出:如果 View 是在 Java 代码里面 new 的,则调用第一个构造函数-->View(Context);
如果 View 是在 xml 里声明的,则调用第二个构造函数-->View(Context, AttributeSet)。
二、Android 坐标系
Android 坐标系和数学上的坐标系是不一样的,定义如下:屏幕的左上角为坐标原点。
向右为 x 轴增大方向。
向下为 y 轴增大方向。
具体如下图所示:
三、View 的位置
View 的位置是相对于父控件而言的,由 4 个顶点确定,如下图 A、B、C、D 所示:
确定 View 的位置有四个参数,分别是 Top、Bottom、Left、Right:Top:子 View 左上角距父 View 顶部的距离。
Left:子 View 左上角距父 View 左侧的距离。
Bottom:子 View 右下角距父 View 顶部的距离。
Right:子 View 右下角距父 View 左侧的距离
具体如下图所示:
四、获取 View 位置的方式
View 的位置是通过 getTop()、getLeft()、getBottom()、getRight() 函数进行获取的。
这里我写了一个小例子来演示这四个方法,如下所示:(获取内部子 View 的位置)
因为是为了演示 View 的位置,所有我这里用绝对布局,并且大小的单位都是用 px,具体布局如下所示:<?xml version="1.0" encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:id="@+id/rl_1"
android:layout_width="600px"
android:layout_height="600px"
android:layout_x="200px"
android:layout_y="200px"
android:background="@color/colorPrimaryDark">
android:id="@+id/view"
android:layout_width="300px"
android:layout_height="300px"
android:layout_centerInParent="true"
android:background="@color/colorAccent" />
我们现在用四个方法来获取一下 View 的位置,具体代码如下所示:public class CoordinateActivity extends AppCompatActivity {
private View mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coordinate);
rl1 = findViewById(R.id.rl_1);
mView = findViewById(R.id.view);
}
@Override
protected void onResume() {
super.onResume();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
MyLogUtils.i(mView.getTop() + "--Top --mView");
MyLogUtils.i(mView.getBottom() + "--Bottom --mView");
MyLogUtils.i(mView.getLeft() + "--Left --mView");
MyLogUtils.i(mView.getRight() + "--Right --mView");
MyLogUtils.i(mView.getX() + "--X --mView");
MyLogUtils.i(mView.getY() + "--Y --mView");
}
}, 200);
}
}
打印结果如下所示:
最外层紫色的 View 的坐标是(200,200),大小是 600px,在它内部,有一个大小为 300px 的子 View 位于其中心位置,所以上述打印结果是完全正确的。
注意:我这里调用 getTop() 等方法是在 onResume() 里面,并且延时了 200ms,是因为如果不延迟直接调用,会出现 View 还没有绘制完,所以获取到的位置都是 0,所以就用最简单的延迟处理了一下(这里的处理方法有很多,比如 View.post() 等);
getX() 和 getY() 的意思是获取子 View 相对父容器的坐标,所以这里结果都是 150。
android view取坐标点,Android 获取子 View 的位置及坐标的方式相关推荐
- android 添加子view,Android基于Window.ID_ANDROID_CONTENT给定id添加子View
Android基于Window.ID_ANDROID_CONTENT给定id添加子View 这一技术特点在一些视频播放器中比较有用. 例如代码: package zhangphil.demo; imp ...
- ViewPager的使用及获取子view控件的操作(inflate)
Step 1: 布局文件中添加viewpager和切换页面button <span style="font-size:18px;"><RelativeLayout ...
- 爬取的网页,获取子元素内容的方法
今天练习网络爬虫,爬取豆瓣电影Top 250,其中每部电影有排名.评分.电影名.导演等信息,分布在不同的标签下面,而每部电影的所有信息都在一个大的<div>标签下,因此需要获取子元素的内容 ...
- 【原转】使用获取subview获取子view
通常我们在view层级里面对subView的操作可以通过两种方式:1.保留一个subview的引用,然后在类中通过该引用对该subview 进行操作,但是要注意在适当的位置添加内存维护的代码,退出前手 ...
- 获取鼠标点击位置的坐标
获取点击的坐标有三种情况 获取在可视区域的坐标 获取在文档页面的坐标 获取在电脑屏幕的坐标 一:获取在可视区域的坐标 e.clientX : 获取距离页面左边的距离 e.clientY :距离页面可 ...
- Android 图片设置坐标点
plugins {id 'com.android.application'id 'kotlin-android'id 'kotlin-android-extensions'//添加扩展 } class ...
- Android Activity使用OnGesture事件以后与子View的Click事件冲突解决办法
在实现多个图片的切换功能时,使用到了手势事件功能,但同时需要给图片增加一个单击事件去执行其它功能.增加单击事件后,图片会截取到touchdown并不再往下传递,导致手势事件失效,这里给出了其解决办法, ...
- Android ViewGroup代码里addView时,子View显示异常
LinearLayout.LayoutParams lp= new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,View ...
- android爬取视频播放地址,Android 视频中抓取图像 - MediaMetadataRetriever
最近在side project中遇到了需要从视频中抓取多张图片的需求.安卓已经提供了从视频获取预览图片的ThumbnailUtils, 但此类不能根据timestamp获取bitmap. 以下记录自己 ...
最新文章
- ios mysql 修改数据,iOS数据库FMDB--增删改查(模糊查询)实写记录
- 李春平:钱不是奥黛莉赫本给的
- PHP系统编程--01.多进程与多线程
- Python面试题大全(四):数据库篇
- 高效的半同步/半异步模式的实现
- 微软服务器虚拟化-Hyper-v详解
- [存档]获取通讯录信息并写到SD卡上
- leetcode二叉树 找路径_LeetCode0257: 二叉树的所有路径
- android对象关系映射框架ormlite之一对多(OneToMany)
- Linux内核邮件列表发送和回复格式研究
- 大数据的可视化:bigvis包的简单尝试
- storm的优化以及雪崩问题
- 为什么DNN的SectionHead Control图片无法显示,也无法折叠
- AOSP>设计>测试>(第三节)兼容性测试套件CTS
- 实现网络IPv6平滑演进的DS-Lite CGN技术
- 3.关于运动控制芯片
- Java 金额转换 阿拉伯数字金额转换成汉字大写金额
- 不要在本该奋斗的年纪选择了安逸
- 大数据系列之知识点总结和企业级游戏行业架构设计
- TM4C KEIL模板建立
热门文章
- 买淘宝特价版,产业升级的证明
- 基于链表的快速排序C语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...
- 怎么判断前轮左右的位置_汽车上主要传感器的安装位置,你知道多少?
- addonsmaker怎么制作_addonsmaker
- mysql 给字段添加索引_怎么给mysql表的字段添加索引和查询索引呢
- NatApp 内网穿透工具简单使用介绍说明
- 【Python教程】 print 和return 的区别
- Python中self的用法
- Python使用正则表达式分割字符串
- Python 函数式编程指北,不只是面向对象哦