Connor学Android - View基础知识

在这里插入图片描述

Learn && Live

虚度年华浮萍于世,勤学善思至死不渝

前言

Hey,欢迎阅读Connor学Android系列,这个系列记录了我的Android原理知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/C5RI5,话不多说我们马上开始!

1.什么是View?

View:界面层的控件的一种抽象,代表一个控件

ViewGroup:内部包含多个控件,即一组View

ViewGroup继承了View,即View本身可以单个控件也可以是多个控件组成的一组控件

在这里插入图片描述

2.View的位置参数有哪些?

在这里插入图片描述
top:View左上角的初始y坐标,getTop()

left:View左上角的初始x坐标,getLeft()

bottom:View右下角的初始y坐标,getBottom()

right:View右下角的初始x坐标,getRight()

y:View左上角的当前y坐标,getY()

x:View左上角的当前x坐标,getX()

translationY:View左上角相对于初始位置的y偏移量,getTranslationY(),y = top + translationY

translationX:View左上角相对于初始位置的x偏移量,getTranslationX(),x = left + translationX

rawY:View左上角相对于手机屏幕左上角的y坐标,getRawY()

rawX:View左上角相对于手机屏幕左上角的x坐标,getRawX()

3.MotionEvent和TouchSlop

MotionEvent

  • ACTION_DOWN:手指接触屏幕的一瞬间
  • ACTION_MOVE:手指在屏幕上移动
  • ACTION_UP:手指从屏幕离开的一瞬间

正常情况下触摸屏幕会触发的事件序列:

(1)点击屏幕后手指离开:DOWN --> UP

(2)点击屏幕滑动一会再松开:DOWN --> MOVE --> … --> MOVE --> UP

TouchSlop

系统所能识别出的被认为是滑动的最小距离,只有滑动的距离超过这个值,系统才会认为是一次滑动

这是一个常量,和设备有关,不同设备这个值可能不同

// 获取TouchSlop
ViewConfiguration.get(getContext()).getScaledTouchSlop()

// frameworks/base/core/res/res/values/config.xml
<dimen name="config_viewConfigurationTouchSlop">8dp</dimen>

4.VelocityTracker、GestureDetector和Scroller

VelocityTracker

速度追踪,用于追踪手指在滑动过程中的速度,包括水平和垂直速度

// 获取tracker并追踪当前事件
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

// 计算速度并获取水平、垂直速度
velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();

// 重置并回收内存
velocityTracker.clear();
velocityTracker.recycle();

注意两点

(1)获取速度,即getXVelocity()、getYVelocity()之前必须调用computeCurrentVelocity()计算速度

(2)这里的速度指一段时间间隔内手指滑过的像素数,computeCurrentVelocity()的参数为时间间隔,单位为ms

​ 速度 = (终点位置 - 起点位置) / 时间间隔

(3)速度有方向,即值有正负:手指从左向右、从上向下滑动速度为正值,反之为负值

GestureDetector

手势检测,辅助检测单击、滑动、长按、双击等行为

建议监听滑动相关的自己在onTouchEvent中实现,监听双击行为使用GestureDetector

比较常用的有:onSingleTagUp(单击)、onFling(快速滑动)、onScroll(滑动)、onLongPress(长按)、onDoubleTap(双击)

Scroller

弹性滑动对象,用于实现View的弹性滑动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ConnorYan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值