Android开发艺术探索(连载)之View 的事件体系(一)view的基本知识

2023-05-16

一,View的位置参数关系:

1.view 的基础概念(略);

2.View中的top,bottom,left,right的表示内容:

 

所以view的宽高:

Width = right - left;

Height = bottom - top;

 

top,bottom,left,right的获取:getTop();getBottom();getLeft();getRight();

3.Android3.0开始View增加了x,y,TranslationX,translationY

X:view左上角横坐标;

Y:view左上角纵坐标;

TranslationX : 横偏移量;

TranslationY : 纵偏移量;

X = left + TranslationX;

Y= top + TranslationY;

*注意:view在平移的过程中,top,left表示的是原始的位置信息,其值并不会发送改变,此时发生改变的是x,y,TranslationX,translationY

实际上就是TranslationX,translationY

 

二,ViewMotionEventTouchSlop:

1.MotionEvent:指在手指触屏幕后所产生的一系列事件:

ACTION_DOWN : 手指刚接触屏幕;

ACTION_MOVE : 手指的屏幕上移动;

ACTION_UP : 手指从屏幕上松开的一瞬间;

所以点击事件触发的情况:

1:Down->UP;

2:Down->move->move->……->Up;

为此我们可以得到点击事件x,y,的坐标;

通过getX();getY();得到相对当前Viewx,y;

通过getRawX();getRawY();得到相对手机屏幕的x,y;

 

2.TouchSlop:是系统所能识别出的最小滑动的最小距离,如果手指滑动的距离小于这个常量的话,系统将不会认为它是滑动的;它是个常量和设备有关;获取方法:ViewConfiguration.get(getContext()).getScaledTouchSlop();

使用情况:当我们再处理滑动时,可以利用这个常量做一些过滤,比如当两次滑动事件的滑动距离小于这个值,我们可以认为未达到滑动的临界值,因此认为它是不滑动的。

 

三,VelocityTracker ,GestureDetectorScroller

1.VelocityTracker :速度追踪,用于追踪手指在滑动的过程中的速度,包括水平和垂直方向的速度。

使用过程:在viewonTouchEvent方法中{

VelocityTracker velocityTracker = VelocityTracker.obtain();

velocityTracer.addMovement(event);

velocityTracker.computeVelocity(1000);//必须先调用,1s

Int xVelocity = (int )velocityTracker.getXVelocity();

Int yVelocity = (int )velocityTracker.getYVelocity();

}

速率可为负值;

速度 = (终点位置 - 起点位置)/时间段;

顺坐标系方向为正值,逆坐标系方向为负值;

*当我们不用时需要将它释放,减少内存:

{

velocityTracker.clear();

velocityTracker.recycle();

}

 

2.GestureDetector : 手势检测,用于辅助检测用户的单击,滑动,长按,双击等行为。

使用GestureDetector过程:

1:创建一个GestureDetector对象并实现OnGestureListener接口,根据需要我们还可以实现onDoubleTapListener从而能够监听双击行为;

{

GestureDetector mGestureDetector = new GestureDetector(this);

//解决长按屏幕后无法拖动的现象

mGestureDetector.setIsLongpressEnabled(false);

}

2:接着接管目标ViewonTouchEven方法,在监听ViewonTouchEvent方法中添加如下实现:

{

Boolean consume = mGestureDetector.onTouchEvent(event);

Return consume;

}

onGestureListeneronDoubleTapListener中方法介绍:

 


 

 

 

3.Scroller :弹性滑动对象,用于实现View的弹性滑动,当我们使用ViewscrollTo/scrollBy方法来进行滑动时,其过程是瞬间完成的,这个没有过度效果用户体验并不好。使用scroll可以实现过渡效果的滑动。

Scroll本身无法让View弹性滑动,需要和ViewComputeScroll方法配合使用才能共同完成这个功能。

使用方法:

 

{

Scroller mScroller = new scroller(mContext);

 

//缓慢滚到指定位置

Private void smoothScrollTo(int destX,int destY){

Int scrollX = getScrollX();

Int delta = destX - scrollX;

//1000ms 内滑向destX,效果就是慢慢滑动

mScroller.startScroll(scrollX,0,delta,0,1000);

Invalidate();

}

 

Public void computeScroll(){

If(mScroller.conputeScrollOffset()){

scrollTo(mScroller.getCurrX(),mScroller.getCurrY());

ostInvalidate();

}

}

}

 

下节对代码详细解释。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android开发艺术探索(连载)之View 的事件体系(一)view的基本知识 的相关文章

随机推荐

  • cmd窗口ERROR 1366 (HY000): Incorrect string value: ‘\xFE\xFE\xFE\xFE‘ for column ‘adress‘ at row 1

    cmd窗口ERROR 1366 HY000 Incorrect string value xFE xFE xFE xFE for column adress at row 1怎么办 xff1f 1 首先需要弄明白为什么会报错 xff1f x
  • mysql的视图、存储过程、游标、事务、引擎、索引的认识和使用

    视图 一 视图概念 xff1a 视图是虚拟表 xff0c 并不存在真正的表 xff0c 可以重用sql语句 xff0c 利用实际存在的一个或几个表链接查询数据 xff0c 只展示部分数据 xff0c 可以保护数据库中数据 只有部分表的权限
  • win10下mysql5忘记root用户密码如何修改密码并登录

    步骤 xff1a 1 关闭mysql服务 xff1a net stop mysql 2 进入mysql安装目录 xff1a 如 3 此时可以免密登录 xff1a 另外开启cmd命令窗口 xff1a 一定要记住刷新权限 xff0c 否则可能拒
  • 虚拟机中三种网卡模式详细介绍

    虚拟机中三种网卡模式 vmware为我们提供了三种网络工作模式 xff0c 它们分别是 xff1a Bridged xff08 桥接模式 xff09 NAT xff08 网络地址转换模式 xff09 Host Only xff08 仅主机模
  • centos7 xfce轻量桌面环境和vnc安装

    一 centos7安装xfce轻量桌面环境 Linux的桌面环境gnome kde xfce lxde 等等使用比较https www cnblogs com chenmingjun p 8506995 html 1 安装额外yum源 yu
  • R语言学习笔记——空间自相关:全局Moran’I/局部Moran’I /Geary’c/Moran散点图

    data ChinaRD2 span class token operator lt span readRDS span class token punctuation span span class token string 34 gad
  • FIFO深度计算问题

    FIFO深度计算公式 xff1a fifo depth 61 burst length burst length X Y r clk w clk burst length xff1a 突发数据个数 X Y xff1a 读时钟周期里 xff0
  • 【游戏开发】游戏开发书籍汇总

    1 游戏设计的艺术 2 游戏设计的100个原理 3 我在美国学游戏设计 4 游戏新手村 xff1a 从零开始做游戏 5 Directx游戏开发终极指南 6 Windows游戏编程大师技巧 7 快乐之道 xff1a 游戏设计的黄金法则 人类的
  • Java~String类型空字符串和Null的区别以及判断方法

    一 区别 null表示的是一个对象的值 xff0c 而不是一个字符串 如声明一个对象的引用 xff0c String a 61 null 表示的是一个空字符串 xff0c 也就是说它的长度为0 如声明一个字符串String s 61 Str
  • 解读官方Android MediaPlayer API(1)

    public class MediaPlayerextends ObjectMediaPlayer class 能够用来使用来控制vudio video xff08 音频或视频 xff09 文件和流文件的播放 举个例子可以在 a targe
  • ACM 几何基础(1)

    点 point 定义 xff1a struct point double x y 线 line 定义 xff1a Struct line Point s e 精度差 Const double eps 61 1e 8 Int sgn doub
  • ACM 几何基础(2)

    判断两条线段是否相交 xff1a 矢量 如果一条线段的端点是有次序之分的话 xff0c 那么这种线段就称为 有向线段 xff0c 如果有向线段 p1p2 的起点 p1 在坐标的原点 xff0c 则可以把它称为矢量 p2 矢量的加减 设二维矢
  • ACM 几何基础(3)

    几何基础 xff08 3 xff09 求线段交点 xff1a 前面已经讲了如何判断两条线段是否相交 xff0c 现在我们来学下如何求线段的交点坐标 首先先了解下 xff1a 定比分点公式 公式介绍 数学中常用的重要公式之一 xff01 在
  • ACM 几何基础(4)

    几何基础 xff08 4 xff09 点到线段最短距离 xff1a 主要学下矢量的方法求解 xff1a 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别 xff0c 即求点到线段最短距离时需要考虑参考点在沿线段方向的投
  • ACM 几何基础(5)

    几何基础 xff08 5 xff09 凸包 xff1a 在学凸包之前 xff0c 最好把叉积弄熟 xff01 定义 xff1a 对一个简单多边形来说 xff0c 如果给定其边界上或内部的任意两个点 xff0c 连接这两个点的线段上的所有点都
  • 【奇技淫巧】薅公司服务器羊毛,IntelliJ IDEA的远程开发

    前言 作为一个程序员 xff0c 在平时工作的时候 xff0c 你觉得电脑的内存多大才够用 xff0c 8G 16G 32G 其实内存对于程序员来说 xff0c 只能说是多多益善 xff0c 像我平时电脑可能一周重启一次 xff0c 开的东
  • ACM 几何基础(6)

    几何基础 xff08 6 xff09 求多边形面积 xff1a 要想计算多边形的面积我们可以转化为求多个三角形的面积之和得到 在解析几何里 xff0c ABC的面积可以通过如下方法求得 xff1a 点坐标 61 gt 边长 61 gt 海伦
  • 解读官方Android MediaPlayer API(2)

    有效和无效状态 xff1a 方法名有效状态无效状态注释getCurrentPosition Idle Initialized Prepared Started Paused Stopped PlaybackCompleted Error 成
  • 解读官方Android MediaPlayer API(3)

    权限 One may need to declare a corresponding WAKE LOCK permission lt uses permission gt element 嵌套类摘要 static interface str
  • Android开发艺术探索(连载)之View 的事件体系(一)view的基本知识

    一 xff0c View的位置参数关系 xff1a 1 view 的基础概念 xff08 略 xff09 xff1b 2 View中的 top bottom left right 的表示内容 xff1a 所以 view的宽高 xff1a W