Android笔记(四) | View基础
本文主要总结有关View的常用基础知识,作为V学习View相关内容的根基。
主要内容:View的位置参数、MotionEvent、TouchSlop对象、VelocityTracker、GestureDetector和Scroller对象。
View类
View类是Android中所有控件的基类,包括ViewGroup(控件组);这也就意味着,View本身可以是单个控件,也可以是包含多个控件的一组控件。
View的位置参数
View的位置主要由四个顶点决定,分别对应于四个属性:top、left、right、bottom。从Android3.0开始,增加了几个额外参数:x、y、translationx、translationY。这些参数都是相对于父容器的。
x:View发生平移后的左上角横坐标
y:View发生平移后的左上角纵坐标
translationX:View的横向偏移量(初始为0)
translationY:View的纵向偏移量(初始为0)
MotionEvent
手指触摸屏幕后的典型事件类型有:
- ACTION_DOWN——手指接触屏幕瞬间;
- ACTION_MOVE——手指在屏幕上滑动;
- ACTION_UP——手指离开屏幕瞬间;
通过MotionEvent对象可以得到点击事件发生的x、y坐标:
- getX()——获取触摸点相对于当前View左上角的横坐标;
- getY()——获取触摸点相对于当前View左上角的纵坐标;
- getRawX()——获取触摸点相对于手机屏幕左上角的横坐标;
- getRawY()——获取触摸点相对于手机屏幕左上角的纵坐标;
TouchSlop
TouchSlop是系统所能识别出的被认为是滑动的最小距离。
- 这是一个常量,和设备有关,在不同设备上这个值可能不同;
- 当手指在屏幕上滑动的距离小于这个值,系统就不会认为这是滑动操作;
- 获取方法:
ViewConfiguration.get(getContext()).getScaledTouchSlop();
这个常量的意义在于,当我们做滑动处理的时候,可以用它来做一些过滤。这样可以改善用户的使用体验。
VelocityTracker
速度追踪,用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度。下面是使用示例:
@Override public boolean onTouchEvent(MotionEvent event) { //创建VelocityTracker对象,并将触摸界面的滑动事件 //加入到VelocityTracker当中。 VelocityTracker velocityTracker = VelocityTracker.obtain(); velocityTracker.addMovement(event); //指定时间间隔为1s,计算速度 velocityTracker.computeCurrentVelocity(1000); //获取水平速度和竖直速度(像素/s) int xVelocity = (int)velocityTracker.getXVelocity(); int yVelocity = (int)velocityTracker.getYVelocity(); //销毁对象,回收内存 velocityTracker.clear(); velocityTracker.recycle(); return super.onTouchEvent(event); }
速度 = (终点位置 - 起点位置)/时间段(可以为负值)
GestureDetector
手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。下面是使用示例:
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener{ GestureDetector mGestureDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //首先,创建GestureDetector对象并根据需求实现OnGestureListener接口 //和OnDoubleTapListener接口 mGestureDetector = new GestureDetector(this,this); } @Override public boolean onTouchEvent(MotionEvent event) { //将目标View中的触摸事件交给GestureDetector处理(这里是MainActivity中的触摸事件) return mGestureDetector.onTouchEvent(event); } }
做完上面的事情之后,即可以选择性的实现OnGestureListener和OnDoubleTapListener中的方法了,这两个接口中的常用方法如下:
方法名 | 描述 | 所属接口 |
---|---|---|
onDown | 手指轻轻触摸屏幕瞬间,由一个ACTION_DOWN触发 | OnGestureListener |
onSingleTapUp | 手指(轻轻触摸屏幕后)松开,伴随一个ACTION_UP而触发,表示单击行为 | OnGestureListener |
onScroll | 手指按下屏幕并拖动,由一个ACTION_DOWN,多个ACTION_MOVE触发,表示拖动行为 | OnGestureListener |
onFling | 用户按下触摸屏,快速滑动后松开,由一个ACTION_DOWN、多个ACTION_MOVE和一个ACTION_UP触发,表示快速滑动行为 | OnGestureListener |
onLoongPress | 用户长久的按住屏幕不放,表示长按行为 | OnGestureListener |
onDoubleTap | 双击,由连续2次单击组成 | OnDoubleTapListener |
说明:
- 在实际开发中,可以不使用GestureDetector,完全可以自己在View中onTouchEvent方法中实现所需的监听。
- 建议:如果只是监听滑动相关,就在onTouchEvent中实现;如果要监听双击这种行为,就使用GestureDetector。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)
前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒。那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行推荐。这篇笔记是依赖于:[Android调用相册、相机(兼容6.0、7.0、8.0)](https://www.jianshu.com/p/41b093d213fb) 文章撰写的,所以不会基本操作的,请先去看看那个。 先上效果哈: 一、布局设置 由于是圆形头像,所以,我们引用一个举世闻名的项目哈:CircleImageView <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layou...
- 下一篇
iOS App Icon启动图尺寸配置适配iPhone XS XR XS Max等
前言 近期在开发新项目, 然后针对 App Icon 与 App LaunchScreen 都需要重新切一套, 需要把相应尺寸大小跟 UI 说明一下, 加上最近刚发布的我 iPhone XS XR XS Max都需要进行统一适配,同时为了让自己以及 UI 同事能更好的去了解 iPhone 不同尺寸特意整理了一下。 App LaunchScreen(启动图) 下面分别罗列出当前所有 iPhone 不同机型尺寸所需 LaunchScreen Size, 其中 iPhone 6 7 8 尺寸一致, iPhone 6 7 8 P 尺寸一致, 所以分别切两种即可. 另外新出的 iPhone X XR XS XSMAX, 除了 X和 XS 尺寸一致外, 都需要分别对应不同尺寸。 其他的也就是 小屏的如 iPhone 4 5 SE 等。 Device 竖屏尺寸 横屏尺寸 iPhone XS Max 1242px × 2688px 2688px × 1242px iPhone XS 1125px × 2436px 2436px × 1125px iPhone XR 828px × 1792px 179...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题