首页 > 其他分享 >Android——View基础知识

Android——View基础知识

时间:2024-12-14 14:56:29浏览次数:7  
标签:GestureDetector int 基础知识 velocityTracker 滑动 Android 屏幕 View

View基础知识

什么是View

View是Android中所用控件的基类,是一种界面层控件的一种抽象,除了View还有ViewGroup。在Android的设计中,ViewGroup继承View,及View本身可以是单个控件也可以是多个控件组成的一组控件,通过这种关系就形成了View树的结构。

View的位置参数

在这里插入图片描述

View的位置主要由四个顶点决定,分属于View的四个属性:top、left、right、bottom, 注意这些坐标都是相对于View的父布局来说即是一种相对坐标

  • 从Android3.0开始,View增加了额外几个参数:x、y、translationX、translationY,其中 x 和 y 是View左上角的坐标,而 translationX 和 translationY 是View左上角相对于父容器的偏移量。
  • View在平移过程中,top和left表示的是原始左上角的位置信息,不会发生改变,此时改变的是x、y、translationX和translationY这四个参数

MotionEvent和TouchSlop

  1. MotionEvent

在手指接触屏幕后所产生的一系列事件,主要有如下几种:

  • ACTION_DOWN 手指刚接触屏幕
  • ACTION_MOVE 手指在屏幕上移动
  • ACTION_UP 手指从屏幕上松开

正常情况下,一次手指触屏屏幕会触发一系列点击事件

  • 点击屏幕后松开:DOWN -> UP
  • 点击屏幕滑动后松开:DOWN -> MOVE-> …> MOVE-> UP

2.TouchSlop

是系统所能识别出的被认为是滑动的最小距离,如果手指在屏幕上滑动时,两次滑动距离小于这个常量,则系统不会认为你在进行滑动操作

作用:可以作为过滤器使用,当两次滑动距离小于该常量,则不认为用户在进行滑动操作,提高用户体验,在源码中对应为:config_viewConfigurationTouchSlop

<!--Base "touch slop" value used by ViewConfiguration as a movement threshold
where scrolling should begin. -->
<dimen name="config_viewConfigurationTouchSlop">8dp</dimen>

VelocityTracker、GestureDetector和Scroller

  1. VelocityTracker

速度追踪,用于追踪手指在滑动过程中的速度,包括水平、竖直方向的速度。

使用时,直接在View的onTouchEvent方法中追踪当前点击事件的速度

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. GestureDetector

手势检测,用于辅助检测用户的单击、滑动、长按、双击等操作

创建一个GestureDetector对象并实现OnGestureListener接口(OnDoubleTapListener 监听双击行为)

GestureDetector mGestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象
mGestureDetector.setIsLongpressEnabled(false);

接管目标View的onTouchEvent方法

boolean consume = mGestureDetector.onTouchEvent(event);
return consume;

之后即可实现OnGestureListener和OnDoubleTapListener中的方法,具体如图:
在这里插入图片描述
注意:

  • 比较常用的有:onSingleTapUp(单击)、onFling(快速滑动)、onScroll(拖动)、onLongPress(长按)和onDoubleTap(双击)
  • 实际开发中,完全可以自己在View的onTouchEvent方法中实现监听滑动(根据个人喜好选择性使用)
  1. Scroller

弹性滑动对象,用于实现View的弹性滑动,实现有过渡效果的滑动,配合View的computeScroll方法使用:

Scroller scroller = 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();
}
@Override
public void computeScroll() {
	if (mScroller.computeScrollOffset()) {
		scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
		postInvalidate();
	}
}

标签:GestureDetector,int,基础知识,velocityTracker,滑动,Android,屏幕,View
From: https://blog.csdn.net/qq_53092981/article/details/144373708

相关文章

  • 【Android】谷歌应用关机闹钟 PowerOffAlarm 源码分析,并实现定时开、关机
    前言RTCRTC即实时时钟(Real-TimeClock),主要是功能有:时间保持:RTC可以在断电的时候,仍然保持计时功能,保证时间的连续性时间显示与设置:RTC可以向系统提供年、月、日、时、分、秒等信息,系统也可以通过接口校准RTC的时间保证准确性关机闹钟PowerOffAlarmPowerOffAlarm是一个与......
  • sql server 2008 r2 展开时报错:参数名:viewInfo ( Microsoft SqlServer Management S
    HR服务器的数据库报了一个不常见的错误,记录下来分享给大伙,如果遇到同样的问题,希望可以得到解决。服务器环境:windowsserver2008(64Bit)数据库版本:SQLserver2008R2错误提示:值不能为空。参数名:viewInfo(Microsoft.SqlServer.Management.SqlStudio.Expl;如下图:  在路径:C:\Us......
  • Android 12.0 Launcher3从首页开始安装app功能实现
    1.前言 在12.0的系统rom定制化开发中,在进行Launcher3的某些功能开发实现过程中,在某些项目中,安装的app比较多,要求在launcher3的首页开始安装app应用,接下来就需要分析下app安装图标排序的流程,然后在实现相关的功能2.Launcher3从首页开始安装app功能实现的核心类packages/a......
  • Android 13.0 app应用安装白名单
    前言应用场景和用户需求‌:ROM定制化开发‌:在定制ROM时,客户可能需要限制某些应用安装,以确保系统的安全和稳定。通过实现应用安装白名单功能,可以满足这种需求。‌企业设备管理‌:在企业设备中,可能需要限制员工只能安装指定的应用,以防止恶意软件和不当使用。通过白名单功能,......
  • 分立器件---MOS管基础知识
    MOS管基础知识1场效应管分类场效应管分为结型(JFET)和金属-氧化物-半导体型(MOSFET)两种类型。JFET的英文全称是JunctionField-EffectTransistor,也分为N沟道和P沟道两种,在实际中几乎不用。MOSFET英文全称是Metal-Oxide-SemiconductorField-EffectTransistor,应......
  • AndroidStudio记单词APP带SQLite数据库期末作业
    AndroidStudio词汇学习应用:利用资源助力期末复习项目概述这款基于AndroidStudio开发的词汇学习应用,充分利用了SQLite数据库的强大功能,为期末复习提供了全方位的支持。这款应用包含了单词记忆、管理和多用户帐号功能,旨在帮助用户有效提升词汇量和备考效率。独特优......
  • 谷歌发布 Android XR 集成 Gemini 语音对话;Voice Agent 平台 Vapi 获 2000 万美元融资
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • Android 设置沉浸式状态栏
    原文地址:Android设置沉浸式状态栏-Stars-One的杂货小窝标题所说的沉浸式状态栏实际就是底部有背景图,而状态栏是沉浸效果(可以在背景图上面展示的),如下面的这种效果:官方API实现官方新版本出了个api,名为enableEdgeToEdge(),方便我们使用这种方法主要适用Activity的整......
  • Vue3+ElementPlus 中 el-image 预览大图属性 previewSrcList 和 translateY(-5px) 的
    【前言】Vue3使用ElementPlus,Vue2使用Element-ui。【问题描述】在Vue3+ElementPlus中,使用el-image和预览大图功能,点击el-image后预览的图片局限在原有图片(小图)内,遮罩也没有充满屏幕。【注】使用  transform:translateY(-5px); 的原因是本来外面有一层div,想用hover ......
  • uniapp的uview2.0框架u--textarea组件(或uv-ui uv-textarea)(或uviewui u--textarea)无法
    问题描述在使用uniapp的uview2.0框架u–textarea组件时,想要使u–textarea支持换行输入,但是默认不支持换行输入,各种百度,没有找到解决问题的方案,最后只有查看源码如下但发现源码没有对属性有过多的处理,我开始怀疑是不是原生组件又问题,但是测试之后发现原生组件并没有问题,经过一天......