首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

onTouchEvent如何获取手指下的电流视图

在 Android 开发中,onTouchEvent 方法可以用于处理触摸事件,但是它不能直接获取手指下的电流视图。要获取手指下的电流视图,可以使用以下方法:

  1. 使用 View.OnTouchListener 接口:

首先,需要创建一个实现 View.OnTouchListener 接口的类,并重写 onTouch 方法。在 onTouch 方法中,可以获取到触摸事件的坐标,并根据坐标获取手指下的视图。

示例代码:

代码语言:java
复制

public class MyTouchListener implements View.OnTouchListener {

代码语言:txt
复制
   @Override
代码语言:txt
复制
   public boolean onTouch(View v, MotionEvent event) {
代码语言:txt
复制
       int x = (int) event.getX();
代码语言:txt
复制
       int y = (int) event.getY();
代码语言:txt
复制
       View viewUnderFinger = v.findViewWithTagTraversal(x, y);
代码语言:txt
复制
       // 处理手指下的视图
代码语言:txt
复制
       return false;
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 使用 GestureDetector 类:

可以使用 GestureDetector 类来处理触摸事件,并根据事件的类型获取手指下的视图。

示例代码:

代码语言:java
复制

public class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

代码语言:txt
复制
   @Override
代码语言:txt
复制
   public boolean onSingleTapUp(MotionEvent e) {
代码语言:txt
复制
       int x = (int) e.getX();
代码语言:txt
复制
       int y = (int) e.getY();
代码语言:txt
复制
       View viewUnderFinger = findViewById(R.id.my_view).findViewWithTagTraversal(x, y);
代码语言:txt
复制
       // 处理手指下的视图
代码语言:txt
复制
       return true;
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 使用 MotionEvent 类:

可以使用 MotionEvent 类来获取触摸事件的坐标,并根据坐标获取手指下的视图。

示例代码:

代码语言:java
复制

@Override

public boolean onTouchEvent(MotionEvent event) {

代码语言:txt
复制
   int x = (int) event.getX();
代码语言:txt
复制
   int y = (int) event.getY();
代码语言:txt
复制
   View viewUnderFinger = findViewById(R.id.my_view).findViewWithTagTraversal(x, y);
代码语言:txt
复制
   // 处理手指下的视图
代码语言:txt
复制
   return super.onTouchEvent(event);

}

代码语言:txt
复制

需要注意的是,以上方法只能获取手指下的视图,而不是电流视图。要获取电流视图,需要使用其他方法或技术。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

切换按钮-自定义控件-拖动效果

重写ViewonTouchEvent()方法,传递进来MotionEvent对象 调用MotionEvent对象getAction()方法,获取当前动作 switch判断一当前动作 事件为MotionEvent.ACTION_DOWN...是手指第一次触摸屏幕 事件为MotionEvent.ACTION_MOVE是手指在屏幕上移动 事件为MotionEvent.ACTION_UP是手指离开屏幕 当手指触摸到屏幕 定义手指最后坐标lastX...调用MotionEvent对象getX() 方法,得到lastX值 当手指在屏幕上移动 定义手指横向移动距离dis 调用getX()-lastX就是移动距离 定义滑动按钮左边就是这个移动距离...判断slideBtnLeft位于合理位置,0到背景图宽度-滑动按钮宽度 调用invalidate()方法,刷新视图 onClick事件和onTouchEvent是有冲突 定义一个标志isDrag...//手指 case MotionEvent.ACTION_DOWN: firstX=lastX=(int) event.getX();

1.2K20

Android自定义系列——14.MotionEvent

Dialog 就是一个特殊视图(没有占满屏幕大小窗口),能够接收到视图区域外事件(虽然在通常情况你根本用不到这个事件),除了 Dialog 之外,你最可能看到这个事件场景是悬浮窗,当然啦,想要接收到视图之外事件需要一些特殊设置...,会产生很多事件,这些事件该如何区分呢?...Android 在 2.0 版本时候开始支持多点触控,一旦出现了多点触控,很多东西就突然之间变得麻烦起来了,首先要解决问题就是 多个手指同时按在屏幕上,会产生很多事件,这些事件该如何区分呢?...getPointerId(int pointerIndex) 获取一个指针(手指)唯一标识符ID,在手指和抬起之间ID始终不变。...int类型共32位(0x00000000),他们用最低8位(0x000000ff)表示事件类型,再往前8位(0x0000ff00)表示事件编号,以手指按下为例讲解数值是如何合成: ACTION_DOWN

1.6K10

Android Scroll分析

,如下 @Override public boolean onTouchEvent(MotionEvent envnt){ // 获取当前输入点X、Y坐标(视图坐标) int x =...true ; } 在不涉及多点操作情况,通常可以使用以上代码来完成触控事件监听,上述仅仅是一个代码模板~ 在Android中提供了很多获取坐标值,相对举例方法,我们来梳理一。...View自身右边到其父布局左边距离 getBottom():获取是View自身底边到其父布局顶边距离 MotionEvent 提供方法 getX():获取点击事件距离控件左边距离,即视图坐标...getY():获取点击事件距离控件顶边距离,即视图坐标 getRawX():获取点击事件距离整个屏幕左边距离,即绝对坐标 getRawY():获取点击事件距离整个屏幕顶边距离,即绝对坐标...同样,可以通过修改View left top right bottom四个属性来控制View坐标。 在每次回调onTouchEvent方法时候,我们都来获取触摸点坐标。

79920

Android开发艺术笔记 | View事件体系

在每棵View树顶部都存在着一个ViewParent对象, 它是整棵View树核心所在, 所有的交互管理事件都由它来统一调度和分配, 从而对整个视图进行整体控制。 ?...根据上图, 可以得出View宽高和坐标的关系: width = right - left height = bottom - top 关于如何得到View这四个参数, 在View...正常情况, 一次手指触摸屏幕行为会触发一系列点击事件; 点击屏幕后离开松开,事件序列为DOWN -> UP; 点击屏幕滑动一会再松开,事件序列为DOWN -> MOVE -> … > MOVE...();//得到是1000ms内手指在垂直方向从上向下滑过像素数,即垂直速度 注意, 获取速度之前必须先计算速度, 即getXVelocity和getYVelocity这两个方法前面 必须要调用...针对上面的例子, 如果我们通过velocityTracker.computeCurrentVelocity(100)来获取速度, 那么得到速度就是手指在100ms内所滑过像素数, 假设返回

61930

View事件分发及滑动冲突解决

一、触摸事件类型 ACTION_DOWN:用户手指按下操作,一个按下操作标志着一次触摸事件开始 ACTION_UP:用户手指抬起操作,一次抬起标志着一次事件结束 ACTION_MOVE:手指抬起前...二、事件传递三个阶段 分发(dispatch) dispatchTouchEvent public boolean dispatchTouchEvent(MotionEvent event) 根据当前视图具体实现逻辑...,并调用自身onTouchEvent进行消费 false或者super.onInterceptEvent表示不对事件进行拦截,需要继续传递给子视图 消费(consume) onTouchEvent public...boolean onTouchEvent(MotionEvent event) true 表示当前视图处理对应事件,事件将不会向上传递给父视图 false 表示当前视图不处理对应事件,事件将会向上传递给父视图...ViewdispatchTouchEvent方法ACTION_MOVE中,如果父容器需要获取点击事件则调用 parent.requestDisallowInterceptTouchEvent(false

82640

AndroidFixScrollView自定义控件

接下来要了解几个知识点, ①了解下Android事件分发机制  ②了解哪些触摸类型事件以及之间联系 ③如何在ViewGroup中寻找子控件(递归 找一个具体控件大坑,尤其是再React-Native...函数,用于判断是否拦截该事件,如果拦截,则调用ViewGrouponTouchEvent。...) up--手指抬起事件 3如何在ViewGroup中寻找子控件 使用递归+instanceof可以父ScrollView找到一组类型相同控件,想找某一个tab子页面中某一个ListView,太坑了!...一开始思路是切换tab页面的话其他tab页面Listview控件可见状态会不可见或者消失,完全不是这么回事,后来发现其实View视图状态一直是可见,不过那时候技术老大提醒说点击不同tab时listview...int action = ev.getAction(); if (action == MotionEvent.ACTION_DOWN) { //当手指时候

1.8K80

Android中View位置和触摸事件详解

,典型事件如下: ACTION_DOWN–手指刚触摸屏幕 ACTION_MOVE–手指在屏幕上移动 ACTION_UP–手指从屏幕上分开一瞬间 2、MotionEvent获取点击事件发生坐标 getX...public boolean onTouchEvent(MotionEvent event) { // 获取TouchSlop(滑动最小距离) float slop = ViewConfiguration.get...、如何使用: 创建一个GestureDetector对象并实现OnGestureListener接口,根据需要实现OnDoubleTapListener接口 // 解决长按屏幕后无法拖动现象,但是这样会无法识别长按事件...mGestureDetector.setIsLongpressEnable(false); 接管目标ViewonTouchEvent方法 return mGestureDetector.onTouchEvent...实现方式:获取到当前手指位置,移动时要减去上次手指滑动位置,然后在加上偏移量 存在问题:OnClick方法貌似没法用了哦,大概是因为在onTouchEvent方法中拦截了吧 改进:我觉得可以用

1.5K51

面试官问我:如何加载100M图片却不撑爆内存,一张 100M 大图,如何预防 OOM?

3.Bitmap 如何处理大图,如一张 30M 大图,如何预防 OOM?...,比如获取Bitmap宽高,内存复用等参数。...然后给我们自定义矩形mRect上下左右边界赋值。一般情况我们使用这个自定义View显示大图,都是占满这个View,所以这里矩形初始大小就让它跟View一样大。...mScroller.isFinished()){ mScroller.forceFinished(true); } return true; } 当手指时候...缩放完成之后,需要根据当前缩放比重新设置绘制区域边界。最后也需要重新定位一边界,因为如果使用两个手指放大之后,这时候双击返回原状,如果不处理边界,位置会出错。处理边界代码可以抽取出来。

2.3K20

可能是讲解Android事件分发最好文章

我就遇到过这样时候,当时我很想有一篇文章能简单地解释触摸事件是怎样在视图层次(view hierarchy)中传播,从而可以将之作为进一步深入学习起点。...一个手势(gesture)是一个事件列,以一个DOWN事件开始(当用户触摸屏幕时产生),后跟0个或多个MOVE事件(当用户四处移动手指时产生),最后跟一个单独UP或CANCEL事件(当用户手指离开屏幕或者系统告诉你手势...我们将要讨论视图层次是这样:最外层是一个ViewGroup A,包含一个或多个子view(children),其中一个子view是ViewGroup B,ViewGroupB中又包含一个或多个子view...然后用户移动手指并最后离开屏幕,此过程中手指是否离开C区域无关紧要,关键是手势(gesture)是从哪里开始。...个人理解:感谢@编程世界孩子 提醒,由此可见,DOWN事件处理实际上经历了一一上两个过程,是指A->BonInterceptTouchEvent,上是指C->B->AonTouchEvent

60620

高级 UI 成长之路 (一) View基础知识你必须知道

从上图可知 ViewGroup 是 View 子类,ViewGroup 在视图层它可以有任意子 View 。 明白 View 层级关系有助于理解 View 工作机制。...*MotionEvent.ACTION_MOVE:** 手指在屏幕上滑动 * **MotionEvent.ACTION_UP:** 手指在屏幕上抬起一瞬间触发该事件 正常情况,一次手指触摸屏幕行为会触发一些列点击事件...针对上面的例子,如果我们通过 obtain.computeCurrentVelocity(1000) 来获取速度,那么得到速度就是手指在 1000 ms 毫秒内所滑过 px 值,因此可以直接套上面公式...另外在说一,在实际开发中,可以不使用 GestureDector, 完全可以自己在 View OnTouchEvent 方法中实现所需要监听,这个看实际场景跟个人喜好了。...View 弹性滑动 知道了 View 如何滑动,我们还要知道如何实现 View 弹性滑动,比较生硬滑动体验确实很差,下面我们介绍 View 如何实现弹性滑动 使用 Scrolle 请参考该篇 View

75110

Android事件分发机制详解

一个手势(gesture)是一个事件列,以一个DOWN事件开始(当用户触摸屏幕时产生),后跟0个或多个MOVE事件(当用户四处移动手指时产生),最后跟一个单独UP或CANCEL事件(当用户手指离开屏幕或者系统告诉你手势...我们将要讨论视图层次是这样:最外层是一个ViewGroup A,包含一个或多个子view(children),其中一个子view是ViewGroup B,ViewGroupB中又包含一个或多个子view...然后用户移动手指并最后离开屏幕,此过程中手指是否离开C区域无关紧要,关键是手势(gesture)是从哪里开始。...个人理解:感谢@编程世界孩子 提醒,由此可见,DOWN事件处理实际上经历了一一上两个过程,是指A- BonInterceptTouchEvent,上是指C- B- AonTouchEvent...BonInterceptTouchEvent方法收到了该MOVE事件,此时B注意到用户手指移动距离已经超过了一定threshold(或者称为slop)。

96831

Android自定义View九宫格手势密码解锁

手指离开屏幕时候判断手势密码是否正确,如若错误这把错误状态点和线绘制出来。 具体实现: 首先我们得绘制出默认正常状态九个点: ?...绘制后默认九个点后,我们接下来处理手势滑动,覆写onTouchEvent方法: /** * 获取选择位置 * @return */ private int[] getSelectedPointPosition...我们来看onTouchEvent方法: @Override public boolean onTouchEvent(MotionEvent event) { // 获取手指触摸xy位置 mX...并标记现在是绘制状态。同样在移动手指时候也是把检测到点存储起来,修改状态为按。当手指离开屏幕时候,把标记改为不在绘制。...在onTouchEvent中,当Action动作是Up时候(手指离开屏幕):就会触发手势密码绘制完成接口: case MotionEvent.ACTION_UP: boolean valid

1.3K30

HarmonyOS实战—滑动事件坐标和返回值

滑动事件获取手指位置 滑动事件三个动作: [在这里插入图片描述] 获取手指位置就涉及到坐标的概念,通过获取到 x、y、z就可以缺任意一个点位置 [在这里插入图片描述] 手机中坐标: [在这里插入图片描述...获取手指位置(坐标) 获取这些数据其实都被鸿蒙操作系统封装到TouchEvent这个动作对象当中,通过动作去调用getPointerPosition 方法,需要传递一个值。...//获取手指位置(坐标) MmiPoint point = touchEvent.getPointerPosition(0); //x、y表示按手指位置 float x = point.getX...//获取手指位置(坐标) MmiPoint point = touchEvent.getPointerPosition(0); //x、y表示按手指位置...根据手指位置来确定是上、、左、右哪个滑动 首先把按 x、y 移动onTouchEvent方法外面去,因为如果没有移动外面去,当第一次按时候就会调用onTouchEvent方法,接着就会调用按位置

96320

Android高频面试专题 - 提升篇(三)事件分发机制

onInterceptTouchEvent:方法返回值为true表示拦截这个事件并交由自身onTouchEvent方法进行消费;返回false表示不拦截,需要继续传递给子视图。...onTouchEvent:方法返回值为true表示当前视图可以处理对应事件;返回值为false表示当前视图不处理这个事件,它会被传递给父视图onTouchEvent方法进行处理。...8、几个重要结论 同一次触摸事件序列是从手指接触屏幕那一刻起,到手指离开屏幕那一刻结束,在这个过程中所产生一系列事件,这个事件序列以down开始,中间含有数量不定move事件,最终以up事件结束...正常情况,一个事件序列只能被一个View拦截且消耗。...9、如何解决View事件冲突?举个开发中遇到例子? 常见开发中事件冲突有ScrollView与RecyclerView滑动冲突、RecyclerView内嵌同时滑动同一方向。

2.3K42

如何在Xcode预览含有Core Data元素SwiftUI视图

如何在Xcode预览含有Core Data元素SwiftUI视图 从SwiftUI诞生之日起,预览(Canvas Preview )一直是个让开发者又爱又恨功能。...结合两年来我在SwiftUI中使用Core Data经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃部分原因•如何在之后开发中避免类似的崩溃出现•如何在Xcode中安全可靠地预览含有...因此,通常不推荐在视图中直接获取或操作Core Data数据(非常简单应用除外)。...SwiftUI通常采用Redux开发模式,通过将获取Core Data数据转换成标准Swift结构从而避免在视图中使用托管对象上下文或托管对象。...预置复杂数据Bundle数据库 对于拥有复杂数据模型应用该如何创建用于预览演示数据呢?

5.1K10

Android ListView实现下拉顶部图片变大效果

/** * 多点触碰时候按,当第0个有手指抬起,再次有手指后,将按事件手指指针作为当前手指指针 * * @param motionEvent */ private void...this.mScalingRunnalable.mIsFinished) { this.mScalingRunnalable.abortAnimation(); } this.mLastMotionY = motionEvent.getY(); //获取第一个手指指针..., "onTouchEvent ACTION_MOVE mActivePointerId" + mActivePointerId); //获取当前id手机指针 int pointer = motionEvent.findPointerIndex...);//获取最后y坐标 this.mActivePointerId = motionEvent.getPointerId(actionIndex);//获取最上层指针手指 Log.d(TAG, "onTouchEvent...ACTION_POINTER_DOWN mLastMotionY = " + mLastMotionY); break; case MotionEvent.ACTION_POINTER_UP: //当第二个手指或者放开

92620

从0开始学自定义View -1

初识View 在安卓中所有的样式都可以说是一个视图,TextView,Button,ImageView...这些官方已经给出view已经无法满足我们日常生活所需了,这个时候,我们就可以自定义View...好了,到这里对canvas画简单图案是告一段落了,那么我们之前获取尺寸是干嘛用呢,下面我们对拖拽进行讲解,拖拽其实就是down,move,up对着三者一个解析,当我们手指时候将会出发down...那么我们怎么去监听他,有方法,那就是onTouchEvent,触摸方法事件分发机制我们节讲。...这里我们直接上代码 拖拽图案 @Override public boolean onTouchEvent(MotionEvent event) { //手指...= (int) event.getY(); switch (action){ case MotionEvent.ACTION_DOWN://按,获取小球初始位置

90230

进阶必备-Android Click事件是怎么触发

由于有同学问到onClick和touch事件关系,这里就从源码角度分析onClick和onLongClick与onTouchEvent事件是怎么关联。...留给读者自己去详细看下源码,这里简单介绍。 onLongClick事件是如何处理呢?...因为onCLick事件是在手指抬起后触发,所以我们选择分析是ACTION_UP事件,但是长按事件是在我们长按某个View时候触发,所以并没有将手指抬起来。...三、总结 对于一般View来讲,onTouchEvent中处理无非是对View一个点击事件处理、按状态处理、长按处理。...读者可以对类似于ScrollView这种带滑动控件onTouchEvent分析一,对比于此文中实现也不太一样哦。

2.1K20

【Android】手把手教你上滑解锁效果

最近,公司开发APP中要实现类似上滑解锁效果推荐页,捣腾了两天,基本实现了效果,附效果图如上。接下来和大家聊聊如何实现这样效果。...实现思路 这个效果实现思路主要围绕手指触屏事件展开,注意点如下: 以ACTION_DOWN和ACTION_UPY轴距离差与自定义滑动阈值作比较来判断是否上滑 借助Scroller类,触发LinearLayout...event); } 禁止下拉并判断是否为有效上滑: switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 获取收按...y轴坐标 mDownY = event.getY(); break; case MotionEvent.ACTION_UP: // 获取视图容器滚动...这里有一个难点就是刷新与推荐页显示区分,我想到是重写列表控件onTouchEvent方法,通过判断其下拉距离来区分。

2.6K20
领券