Android View基础知识
来源:互联网 发布:撒贝宁智商知乎 编辑:程序博客网 时间:2024/06/09 17:00
概述
对于view的基础知识来说,基本上都是些概念性的东西,有些内容重要但又不太容易理解,之前研究过一次,但是隔了很久不用,有些概念弄混淆了,导致不得不重新去查找资料学习,这也就是我写这篇博客的原因。
View的位置参数
view的位置由它的四个顶点来决定,分别是left、top、right、bottom,这四个属性确定了它相对父容器所在的位置:即left是view左上角相对于父容器的横坐标,top是view左上角相对于父容器的纵坐标,right是view右下角相对于父容器的横坐标,bottom是view右下角相对于父容器的纵坐标。在view的源码中,这四个属性分别对应mLeft、mTop、mRight、mBottom,并且提供了对应的get\set方法来进行操作。
自Android3.0开始,view又加入了x、y、translationX、translationY几个属性,它们是为view内容的移动服务的。x、y代表view内容左上角的横纵坐标,translationX、translationY代表view内容的偏移量,默认为0。view为这四个属性也提供了相应的get\set方法。之间的关系如下:(注意:view的位置和它的内容可以分离开来)
x = mLeft + translationXy = mTop + translationY
需要注意的是,view移动后,mLeft、mTop表示的是原始左上角的位置坐标,view的位置不会随着内容的移动而改变。
MotionEvent、TouchSlop
MotionEvent:指手指触摸屏幕产生的一系列事件,常用的事件类型如下:
- ACTION_DOWN:手指刚触摸屏幕事件
- ACTION_UP:手指离开屏幕事件
- ACTION_MOVE:手指在屏幕上移动事件
通过MotionEvent对象我们还可以得到点击事件发生的x、y坐标。系统提供了getX\getY和getRawX\getRawY两组方法,getX\getY返回的是事件相对于当前view的左上角的x和y坐标,getRawX\getRawY返回的是事件相对于屏幕左上角的x和y坐标。
TouchSlop:设备能识别的滑动事件的最小距离,随设备而定,一般用于区分事件是点击事件还是滑动事件。获取方式如下:
ViewConfiguration.get(getApplicationContext()).getScaledTouchSlop();
VelocityTracker、GestureDetector
- VelocityTracker:速度跟踪,用于获取手指滑动屏幕过程中的速度,分为水平速度和垂直速度。使用方式如下:
VelocityTracker velocityTracker = VelocityTracker.obtain(); velocityTracker.addMovement(event); velocityTracker.computeCurrentVelocity(1000); int velocityX = (int) velocityTracker.getXVelocity(); int velocityY = (int) velocityTracker.getYVelocity(); velocityTracker.clear(); velocityTracker.recycle();
在获取水平速度或垂直速度之前,必须先计算当前速度,即第3行内容必须在第4、5行之前。这里的速度指的是一段时间内手指划过的像素数,如:时间设置为1000ms(computeCurrentVelocity的参数值),在1s内,手指水平划过的像素数是100,那么速度就是100;速度可以是负数,计算方法如下:(注意:速度跟踪器使用完后,要释放并回收利用。)
速度 = (终点位置 - 初始位置)/ 时间间隔
- GestureDetector:手势检测,可以用于辅助处理点击、双击、滑动、长按事件。需要处理什么事件就实现对应方法即可,然后用gestureDetector.onTouchEvent(event)接管view的onTouchEvent()方法即可。GestureDetector有两个内部接口提供事件方法,分别为OnGestureListener和OnDoubleTapListener。
- OnGestureListener接口常用方法如下:
boolean onDown(MotionEvent e);boolean onSingleTapUp(MotionEvent e);boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);void onLongPress(MotionEvent e);boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
- OnDoubleTapListener接口常用方法如下:
boolean onSingleTapConfirmed(MotionEvent e);boolean onDoubleTap(MotionEvent e);boolean onDoubleTapEvent(MotionEvent e);
- 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的生命周期
- HTML 禁止拖动Video进度条
- 004-执行 docker attach 后,没有进入容器内部
- 汽车钥匙加密算法技术
- 仿iphone原生短信滑动时惯性效果
- 背包问题(01背包,完全背包,多重背包)
- Android View基础知识
- Java中的读/写锁
- N阶楼梯上楼问题
- GLSL ROTATION ABOUT AN ARBITRARY AXIS
- 【干货】一键压缩Android项目中png的大小!
- Docker学习(一)简介
- C/C++常用头文件及函数汇总
- Android 可拖拽悬浮按钮
- 微信小程序的逻辑层