Android View 基础知识
来源:互联网 发布:汉密尔顿 知乎 喜剧 编辑:程序博客网 时间:2024/05/20 18:03
我们先来看一下 Android 官方是如何介绍 View 的:
This class represents the basic building block for user interface components. A View occupies a rectangular area on the screen and is responsible for drawing and event handling. View is the base class for widgets, which are used to create interactive UI components (buttons, text fields, etc.). The ViewGroup subclass is the base class for layouts, which are invisible containers that hold other Views (or other ViewGroups) and define their layout properties.
大概意思是这样:这个类表示用户界面组件的基本构建块。视图在屏幕上占据一个矩形区域,负责绘图和事件处理。视图是小部件的基类,用于创建交互式 UI 组件(按钮、文本字段等),ViewGroup 类布局的基础课,它是看不见的容器持有其它 View(或其他viewgroup)并确定其布局属性。
View 是 Android 体系中一个非常重要的概念,虽然说 View 不属于四大组件,但是它的作用确比四大组件中的 Broadcast Receiver、Content Provider 的重要性都要大,在我们的实际开发中,Activity 承载着可视化的功能,同时 Android 系统提供了很多控件,有基本的 TextView、Button 等,但是往往很多时候系统提供的控件在实际开发中并不能很好地满足我们的需求,这样就需要我们去自定义能满足需求的组件,这就要求我们对 View 的基础知识必须掌握,并且慢慢达到深入的理解,接下来我们开始介绍 View 的基础知识
一、View 是什么
在实际开发中我们每天都在使用 View,几乎每天提到 View,那么 View 到底是什么,通过上面的官方文档我们便可见一般,View 是 Android 中所有空间的基类,不管是简单的 TextView 和 Button 还是复杂的几大常用布局 LinearLayout、RelativeLayout 或 ListView、RecyclerView,他们的基类都是 View,所以说 View 是一种界面层的控件的一种抽象,它代表了一个控件,除了 View 还有 ViewGroup,就是控件的组合,也就是说 ViewGroup 内部包含了很多个控件,即一组 View, ViewGroup 也继承于 View,这就是说 View本身就可以是单个控件,也可以是由多个控件组成的一个控件组,根据这些概念,我们现在显然能知道我们平时在开发中的 TextView、Button 是个 View, 而 LinearLayout、RelativeLayout 不但是个 View, 同样也是一个 ViewGroup 等等,以此类推,理解 View 的这种层级关系有助于我们理解 View 的工作机制
二、View 的位置参数
View 的位置参数主要由它的四个顶点来决定,分别对应于 View 的四个属性:top、left、right、bottom,其中 top 是左上角纵坐标,left 是左上角横坐标,right 是右下角横坐标,bottom 是右下角纵坐标,需要注意的是,这些坐标都是相对于 View 的父容器来说的,因此它是一种相对坐标,View 的坐标和父容器的关系如下图所示:
根据上图我们可以得出 View 的宽度和坐标的关系:
width = right-left height = bottom - top
那么如何得到 View 的这四个参数呢?在 View 的源码中它们对应于 mLeft、mRight、mTop、mBottom 这四个成员变量,获取方式如下所示:
- Left = getLeft();
- Right = getRight();
- Top = getTop();
- Bottom = getBottom();
- x = left + translationX
- y = top + translationY
三、MotionEvent 和 TouchSlop
MotionEvent
在手指接触屏幕后所产生的一系列事件中,典型的事件类型有如下几种:
- ACTION_DOWN------手指刚接触屏幕
- ACTION_MOVE------手指在屏幕上移动
- ACTION_UP------手指从屏幕上松开的一瞬间
- 点击屏膜后离开松手,事件序列为 DOWN -> UP
- 点击屏膜滑动一会儿再松开,事件序列为DOWN -> MOVE -> ...... MOVE -> UP
VelocityTracker velocityTracker = VelocityTracker.obtain();velocityTracker.addMovement(event);接着,当我们想知道当前的滑动速度时,这个时候可以采用如下方法来获得当前的速度:
velocityTracker.computeCurrentVelocity(1000);int xVelocity = (int) velocityTracker.getXVelocity();int yVelocity = (int) velocityTracker.getYVelocity();
在这一步中有两点需要注意:
- 速度 =(终点位置 - 起点位置)/ 时间段
velocityTracker.clear();velocityTracker.recycle();上面就是如何使用 VelocityTrackr 对象的全过程
GestureDetector mGestureDetector = new GestureDetector(this); //解决长按屏膜后无法拖动现象 mGestureDetector.setIsLongpressEnabled(false);
接着,接管目标 View 的 onTouchEvent() 方法,在监听 View 的 onTouchEvent() 方法中添加如下实现:
boolean consume = mGestureDetector.onTouchEvent(event);return consume;
- onSingleTapUp() ---- 单击
- onFling() ---- 快速滑动
- onScroll() ---- 拖动
- onLongPress() ---- 长按
- onDoubleTop() ---- 双击
- android 自定义view基础知识
- android 自定义view基础知识
- Android --View基础知识
- Android View 基础知识
- Android View基础知识
- Android View 基础知识
- Android View学习笔记(一):View基础知识
- Android View系列一: View基础知识
- Android 自定义View——View 基础知识
- Android自定义view之基础知识
- Android自定义View——基础知识篇
- Android学习笔记 3.1View的基础知识
- 【Android基础知识】Drawable Animation和View Animation
- Android 艺术开发探索读后感-view基础知识
- Android自定义View——基础知识篇
- Android基础知识梳理之View相关知识
- android自定义View之零散基础知识
- Android自定义控件基础知识----View的生命周期
- io多路复用 select
- 内存泄漏与内存溢出总结
- redis 有序集合
- 制作图标字体(详解),使用工具icomoon
- day11-cookie&session
- Android View 基础知识
- opencv︱opencv中实现行人检测:HOG+SVM(二)
- 机器翻译第一步--词向量的生成与保存
- eclipse中关于SVN插件的安装和配置方法
- 图片处理(防止内存溢出)
- 项目的访问路径问题
- 【C++primer学习日记】2.1基本内置类型
- LeetCode 547 Friend Circles(并查集)
- maven依赖中的scope使用