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);
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 uc打开网页很慢怎么办 京东手机号码无法登录怎么办 织梦系统网站没收录怎么办 电脑开机出现一堆乱码怎么办 电脑文件夹出现乱码打不开怎么办 电脑出现f1和f2怎么办 电脑中韩文内容显示乱码怎么办 入驻shopee没身份证怎么办 液相色谱柱柱压降低怎么办 c18色谱柱堵了怎么办 色谱柱进空气了怎么办 宫颈评分只有3分怎么办 淘宝鞋子售后退货商家拒收怎么办 退货申通cp原因怎么办 运费险赔的少怎么办 淘宝卖游戏账号恶意退款怎么办 淘宝账号体检虚拟违规怎么办 京东虚拟单被骗怎么办 网络公选课挂科怎么办 淘宝评论被商家关闭怎么办? 皇冠车钥匙丢了怎么办 皇冠行李箱钥匙丢了怎么办 淘宝主推产品扣两分怎么办 淘宝直通车宝贝排查下架怎么办 滴滴车龄超过8年怎么办 购物车超120了怎么办 没发货申请退款卖家不处理怎么办 淘宝卖家帐号被骗了怎么办 淘宝网下单忘了用返利网怎么办 该地域无法观看此直播怎么办 宝宝喝了有活虫的奶粉怎么办 淘宝商家店铺状态异常怎么办 淘宝购物提示买家信息错误怎么办 苹果淘宝占用空间大怎么办 苹果手机淘宝占内存太大怎么办 苹果手机淘宝图标找不到了怎么办 苹果手机看淘宝很卡怎么办 苹果手机淘宝忘了密码怎么办 苹果手机更新后淘宝打不开怎么办 淘宝买到苹果翻新机怎么办 淘宝网密码忘了怎么办