Android View基础知识

概述

对于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 + translationX
y = 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值