`

[转]Android View体系(一)视图坐标系

阅读更多

前言

Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,在这个系列中我会陆续讲到View坐标系、View的滑动、View的事件分发等文章来逐步介绍Android View体系。

1.View简介

View是Android所有控件的基类,同时ViewGroup也是继承自View,看下面这张图我们就会有一个直观的了解: 
这里写图片描述

知道了View的层级关系有助于对View的理解,从上图可以发现我们常用的这些控件都是继承于View,如果我们更好的掌握了View的知识体系,那么我们在界面编程时则会更加的得心应手。

2.Android坐标系

Android中有两种坐标系,分别为Android坐标系和视图坐标系,首先我们先来看看Android坐标系。 
在Android中,将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向。

这里写图片描述

在下文讲到的MotionEvent提供的getRawX()和getRawY()获取的坐标都是Android坐标系的坐标。

3.视图坐标系

要了解视图坐标系我们只需要看懂一张图就可以了: 
这里写图片描述

View获取自身宽高

  • getHeight():获取View自身高度
  • getWidth():获取View自身宽度

View自身坐标

通过如下方法可以获得View到其父控件(ViewGroup)的距离:

  • getTop():获取View自身顶边到其父布局顶边的距离
  • getLeft():获取View自身左边到其父布局左边的距离
  • getRight():获取View自身右边到其父布局左边的距离
  • getBottom():获取View自身底边到其父布局顶边的距离

MotionEvent提供的方法

我们看上图那个深蓝色的点,假设就是我们触摸的点,我们知道无论是View还是ViewGroup,最终的点击事件都会由onTouchEvent(MotionEvent event)方法来处理,MotionEvent也提供了各种获取焦点坐标的方法:

  • getX():获取点击事件距离控件左边的距离,即视图坐标
  • getY():获取点击事件距离控件顶边的距离,即视图坐标
  • getRawX():获取点击事件距离整个屏幕左边距离,即绝对坐标
  • getRawY():获取点击事件距离整个屏幕顶边的的距离,即绝对坐标
分享到:
评论

相关推荐

    Android 坐标系与视图坐标系图解分析

    "Android 坐标系与视图坐标系图解分析" Android 坐标系是指 Android 中的屏幕坐标系,原点位于屏幕的左上角顶点,从原点向右是 X 轴的正方向,从原点向下是 Y 轴的正方向。 Android 坐标系是 Android 中的绝对坐标...

    Android自定义View,View中的原点坐标相关问题

    在Android开发中,自定义View是一项常见的任务,它允许开发者根据特定需求创建具有独特功能和交互的视图组件。本文将深入探讨Android View中的原点坐标相关问题,这对于理解和优化自定义View的绘制至关重要。 首先...

    Android OpenGL ES 绘制三维/空间坐标系透明

    在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程涉及到几个关键的概念和技术。 首先,我们要理解OpenGL ES中的坐标系。OpenGL ES采用右手坐标系,其中X轴正...

    Android 支持滚动的自定义坐标系

    在Android开发中,有时我们需要创建个性化的视图来满足特定的数据显示需求,比如自定义的坐标系用于绘制折线图。这个"Android 支持滚动的自定义坐标系"项目就是为了实现这样一个功能,允许用户根据自己的需求定义...

    Android应用 坐标系详细介绍

    2. Android View 绝对与相对坐标系 在View的布局过程中,有两种重要的坐标系:绝对坐标系和相对坐标系。 - 绝对坐标系:指的是View相对于父布局的边界位置。可以使用`getLeft()`, `getTop()`, `getRight()` 和 `...

    Android-一个小的坐标转化工具可以将坐标点或其他的点转化到自定义的view上面

    首先,Android中的坐标系统是基于左上角为原点的笛卡尔坐标系,X轴向右延伸,Y轴向下延伸。然而,在实际应用中,我们可能需要处理其他坐标系统,比如GPS坐标、地理坐标等,它们与Android视图系统的坐标不完全一致。 ...

    Android坐标转换.zip

    3. **像素坐标系**:在Android中,每个像素都有一个坐标,像素坐标系与屏幕坐标系类似,但要考虑屏幕的密度。不同密度的设备,相同物理尺寸的像素在坐标上的表示会有所不同,这就需要使用到dp(density-independent ...

    android 画一个自定义的二维虚线坐标

    在Android开发中,有时我们需要为应用创建自定义的视图以满足特定的界面需求,比如绘制二维虚线坐标。这个自定义的二维虚线坐标视图可以用于展示数据图表,帮助用户直观理解各种数值关系。下面我们将深入探讨如何...

    Android-CoordinateAxisChart在Android绘制坐标轴函数图像

    在二维坐标系中,每个点的位置由一对坐标值决定,即X值和Y值。`CoordinateAxisChart`就是用来绘制这种图表的工具。 在Android中,自定义视图通常是实现复杂图形绘制的最佳选择。开发者需要继承`View`类,重写`...

    深入浅析Android坐标系统

    在View区域,Android使用两种坐标系:绝对坐标和相对坐标。 - **绝对坐标**:表示View相对于其父布局的位置。例如,`getLeft()`返回View左边缘距离父布局左边缘的距离,`getTop()`返回View顶部距离父布局顶部的...

    View坐标位置XY轴详解

    在Android开发中,View是构建用户界面的基本元素,理解View的位置和坐标系统是开发者必备的知识。本文将深入探讨“View坐标位置XY轴详解”,并基于配套博客提供的详细内容进行阐述。 首先,我们要知道Android中的...

    Android自定义view——组合控件

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特的用户界面元素。本主题将深入探讨如何在Android中实现自定义组合控件,即利用多个基础控件构建一个具有特殊功能或样式的复合视图。...

    Android-Android自定义View之几何图形绘制

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特的视图组件。本主题聚焦于“Android自定义View之几何图形绘制”,特别是如何利用Android的Canvas API来构建维度图表,如模仿京东白...

    Android View的六种移动方式

    4. **setTranslationX(translationX)** 和 **setTranslationY(translationY)**:这两个方法允许你在坐标系中独立地平移View。`translationX`和`translationY`分别代表View在X轴和Y轴上的位移。它们不同于`offset*`...

    Android-Android开发使用PupopWindow在指定View的上下左右动态显示菜单列表

    这通常涉及到对屏幕坐标系的理解,以及对`offsetX`和`offsetY`的精确计算。例如,如果要在某个按钮下方显示PopupWindow,可以这样做: ```java int[] buttonPosition = new int[2]; button.getLocationOnScreen...

    android_字符旋转

    在RotateTextView中,我们需要在onDraw()中调用canvas.rotate()方法来改变Canvas的坐标系,使得绘制的文本出现旋转效果。 5. LayoutParams:为了在布局中正确显示RotateTextView,我们需要设置合适的LayoutParams,...

    OpenGL ES 3D 坐标变换

    OpenGL ES 是一种针对嵌入式设备的图形处理标准,尤其在Android平台上被广泛使用。它是一种轻量级的版本,适合资源有限的移动设备。3D坐标变换是OpenGL ES编程中的核心概念,它涉及到物体在三维空间中的位置、旋转和...

    截取View转为图片

    注意,由于View的默认坐标系原点在左上角,因此在调用`draw()`方法前,可能需要对Canvas做一些平移操作,以确保View的绘制位置正确。 以下是一个简单的示例代码: ```java // 创建Bitmap Bitmap bitmap = Bitmap....

    Android代码-随手势进行3D旋转的源码.zip

    通常,我们可以用滑动的起始和结束位置在屏幕坐标系中的差异来确定旋转的角度。 7. **动画平滑过渡**: - 为了使旋转动画看起来更加自然,可以设置动画的持续时间和插值器。`Animator.setDuration(long duration)`...

Global site tag (gtag.js) - Google Analytics