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

Android面试官最爱问的12个自定义View的高级问题

自定义View中的多点触控与滑动 问题:如何使用GestureDetector实现手势识别? 出发点:测试面试者对于手势处理工具的熟练掌握程度。...注册监听器:将GestureDetector与View关联,通过onTouchEvent方法传递触摸事件。 问题:在自定义View中,如何处理多点触控事件?...出发点:考察面试者对于多点触控事件处理的实际操作能力。...参考简答: 使用MotionEvent的多点触控方法:通过getPointerCount获取触摸点数量,通过getX(i)和getY(i)获取各个触摸点的坐标。...手势解析库的使用:在复杂场景下,考虑使用手势解析库如GestureDetector,简化多点触控的处理逻辑。 问题:在自定义View中,如何实现滑动和缩放功能?

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android开发笔记(四十五)手势事件

    手势事件的流程 基本手势事件 基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发。...TouchEvent 下面是触摸事件的常用方法: getAction : 获取当前的动作 getX : 获取当前在控件内部的相对坐标X getY : 获取当前在控件内部的相对坐标Y getRawX...: 获取当前在屏幕上的相对坐标X getRawY : 获取当前在屏幕上的相对坐标Y getEventTime : 获取当前的事件时间 手势检测GestureDetector 由于在onTouchEvent...借助于GestureDetector,可以在大多数场合下辨别出常用的几个手势事件,如点击、长按、翻页等等。...查看源码会发现scrollBy内部就是调用scrollTo,当然得先把当前坐标加上偏移量,从而得到滑动后的绝对坐标。 视图滑动例子 下面是一个简单滑动TextView的效果图: ?

    1.3K30

    Carson带你学Android:手把手教你学会手势识别应用 GestureDetector

    函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener() {...} }); // 步骤2-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理...函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener() {...} }); // 步骤3-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理...函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener() {

    1.6K11

    Android 手势识别应用:手把手教你学会 GestureDetector(含实例讲解)

    函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener() {...} }); // 步骤2-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理...函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener() {...} }); // 步骤3-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理...函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应 View.setOnTouchListener(new View.OnTouchListener() {

    10.8K41

    View的事件体系

    2.MotionEvent 手指触摸屏幕后的一系列事件,包括ACTION_DOWN,ACTION_MOVE,ACTION_UP 3.TouchSlop 系统所能识别的被认为是滑动的最小距离,获取方式为...mVelocityTracker.recycle(); //一般在onDetachedFromWindow中调用 5.GestureDetector GestureDetector用于辅助检测用户的单击...和OnDoubleTapListener的方法(具体实现这里不详细说明) 建议:如果只是监听滑动相关的事件在onTouchEvent中实现;如果要监听双击这种行为的话,那么就使用GestureDetector...该方法需要重写父容器的onInterceptTouchEvent方法,在内部做相应的拦截即可,其他均不需要做修改。.../51007062 看该文的最后,scrollview和listview的滑动冲突 我决定采用外部拦截法。

    46030

    札记:android手势识别,MotionEvent

    有:触屏,物理/虚拟按键,摇杆,鼠标等,下面的讨论针对最广泛的交互——触屏( SOURCE_TOUCHSCREEN)。...触屏设备从交互设计上看就是各种手势,有点击,双击,滑动,拖拽,缩放等等交互定义,本质上它们都是基础的几种触摸事件的不同模式的组合。...在安卓触屏系统中,支持单点、多点(点通常就是手指)触摸,每个点有按下,移动和抬起。 触屏交互的处理分不同触屏操作——手势的识别,然后是根据业务对应不同处理。为了响应不同的手势,首先就需要识别它们。...了解在哪些地方可以接收事件,什么时候去处理消耗事件是界面编程的一个重要方面,但“输入事件的传递过程”是一个重要且够复杂的话题,本篇文章重点是触屏事件的各种手势识别,相关的知识仅从“理解的完整和条理性”出发占据一定篇幅...(this, mGestureListener); 在onTouch方法中将收到的事件传递给GestureDetector。

    5.2K70

    Android面试老生常谈的 View 事件分发机制,看这一篇就够了!

    ---- View 滑动事件冲突 在开发当中,View 的滑动冲突时经常遇到的,比如 ViewPager 嵌套 ViewPager,ScrollView 嵌套 ViewPager。...} return super.onInterceptTouchEvent(ev); } 内部解决法 从子View着手,父View先不要拦截任何事件,所有的事件传递给 子View,如果子View...,里面有详细介绍哦 ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 ---- View 双击,多击事件是怎么实现的 实现之前,我们首先来阐述一下思路,怎样实现双击事件,正所谓...接口:OnGestureListener,OnDoubleTapListener 内部类:SimpleOnGestureListener,同时实现了 OnGestureListener,OnDoubleTapListener...讲解之前,我们向来看一下怎么使用 GestureDetector(Context context, GestureDetector.OnGestureListener listener) GestureDetector

    68420

    View 事件分发机制,看这一篇就够了

    ---- View 滑动事件冲突 在开发当中,View 的滑动冲突时经常遇到的,比如 ViewPager 嵌套 ViewPager,ScrollView 嵌套 ViewPager。...} return super.onInterceptTouchEvent(ev); } 内部解决法 从子View着手,父View先不要拦截任何事件,所有的事件传递给 子View,如果子View...,里面有详细介绍哦 ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 ---- View 双击,多击事件是怎么实现的 实现之前,我们首先来阐述一下思路,怎样实现双击事件,正所谓...接口:OnGestureListener,OnDoubleTapListener 内部类:SimpleOnGestureListener,同时实现了 OnGestureListener,OnDoubleTapListener...讲解之前,我们向来看一下怎么使用 GestureDetector(Context context, GestureDetector.OnGestureListener listener) GestureDetector

    74940

    Flutter | 超简单仿微信QQ侧滑菜单组件

    基本上不到一分钟,相信大家都能想出来答案:ScrollView,没错,也就只有 ScrollView 满足我们的需求。...SizedBox( width: screenWidth, child: child, ), 1.首先把 ScrollView 滑动的位置改为横向2.把滑动的效果改为 ClampingScrollPhysics...基于这个问题,在创建整个 SlideItem 的时候,通过构造函数把每一个 menu 都添加上了 GestureDetector,然后在 onTap() 回调中调用 menu 的 onTap() 方法,...这里有一个知识点,我们设置的点击事件默认是不会命中透明组件的,所以要给第一个默认占满屏幕宽度的 Widget 加上一个属性:behavior: HitTestBehavior.opaque。...,如果子组件中有测试通过的,则当前组件通过,这就意味着,如果指针事件作用于子组件上时,其父级组件也肯定可以收到该事件。

    2.3K32

    限时分享Android面试中事件分发的高级技巧

    问题: 请比较MotionEvent和GestureDetector的区别,并说明它们在事件处理中的应用场景。...区别在于MotionEvent是原始的触摸事件,而GestureDetector是对触摸事件的高级抽象和封装,提供了更便捷的手势识别功能。...常见的滑动冲突场景包括ScrollView嵌套RecyclerView、ViewPager嵌套RecyclerView等。...冲突处理规则: 对于外部滑动与内部滑动方向不一致产生的滑动冲突,通过判断滑动方向来决定哪个view进行拦截 对于外部滑动与内部滑动方向一致产生的滑动冲突,通过滑动到特殊的位置进行决定哪个view进行拦截...外部拦截:事件交由父view去处理,重写外部父布局的onInterceptTouchEvent方法,根据条件判断什么时候进行拦截 内部拦截:事件交由子view去处理,重写内部子view的dispatchTouchEvent

    17010

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

    实现思路 这个效果的实现思路主要围绕手指触屏事件展开,注意点如下: 以ACTION_DOWN和ACTION_UP的Y轴距离差与自定义的滑动阈值作比较来判断是否上滑 借助Scroller类,触发LinearLayout...方法后刷新视图,以此来达到流畅滑动的效果,其实ViewPager、ScrollView等控件都是通过Scroller来实现流畅滑动的。...想实现这样的效果,需要借助GestureDetector.OnGestureListener接口的onScroll API方法的第四个参数distanceY,通过简单算法的计算让其实际滑动位置随distanceY...问题与改进 问题出现 基于上述的扩展,在RecyclerView的item里的控件添加点击事件后,发现推荐页无法按预期显示隐藏:无论滑动多短的距离甚至是向上滑动,只要是在屏幕下方滑动,推荐页总是会自己显示出来...onTouchEvent返回false,从而让touch事件继续向外传递到RecyclerView。

    2.7K20

    Android学习第七弹之手势操作

    在昨天我们讲了Android的OnTouch触摸事件,有时候触摸和手势是相互联系的,密不可分的关系,所以上节我们讲了触摸事件,今天我们自然而然的就需要讲手势操作了。...手势就是用户对手机屏幕进行连续触碰,比如:从屏幕左边滑到手机右边,从屏幕上面滑动到屏幕下面等等,手势可以是一笔,也可以是多笔,可以形成规则或不规则的图形。 手势是如何识别的呢?...Android的SDK提供了对手势的识别、自定义手势、存取手势、手势库中査询手势的相关类/接 口,提供了android.view.GestureDetector包用于检测用户的手势。...与手势相关的类和接口 手势操作一般用到下面的三个类: android.view.GestureDetector 手势操作的识别类,通过他来使用下面的识别接口,该类在andmid.view.GestureDetector...方法中,将Touch事件传递给gestureDetector对象的onTouchEvent方法进行手势判定。

    91760

    【IOS开发基础系列】UIScrollView专题

    所以所有的touch 事件都会进入到它自己里面去了。内部的touch事件检测到这个事件是不是和自己相关的,或者处理或者除递给内部的view。...(1)如果150ms内touch未产生移动,它就把这个事件传递给内部view;     (2)如果150ms内touch产生移动,开始scrolling,不会传递给内部的view。...(3)如果150ms内touch未产生移动并且UIScrollView开始传递内部的view事件,但是移动足够远的话,且canCancelContentTouches = YES,UIScrollView...会调用touchesCancelled方法,cancel掉内部view的事件响应,并开始scrolling。...    当值是 YES 的时候,用户触碰后,然后在一定时间内没有移动,scrollView 发送 tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView

    65630

    开源组件photoView学习

    功能特性  支持放缩超出边界,多点触控和双击事件  滚动和滑动  和ViewPager等能完美兼容  矩阵变化等有回调,方便前台其他展示的改变  单击,长按都有回调提醒 源码剖析 那么怎么来学习他的源码呢...里面有个接口GestureDetector,也是跟Scroller差不多,有个兼容不同版本的生成器,统一生成GestureDetector,也就是不同版本的实现。...在CupcakeGestureDetector的onTouchEvent中,能够找到具体怎么处理事件的逻辑。 6.首先来看看怎么拖拽的?  ...9.最后一个了,双击时间,长按事件呢?  ...这个就简单些了, 因为我们经常会用到的GestureDetector,添加一个监听器就好了,来看看代码实现 mGestureDetector = new GestureDetector(imageView.getContext

    90050

    Carson带你学Android:完美解决ScrollView与嵌套EditText的滑动冲突

    ); mEditText = findViewById(R.id.mEditText); } 问题 mScrollView 可滑动,但里面设置的 mEditText 不可滑动。...原因分析 mScrollView把事件消费掉了,没有传递到EditText,从而导致没法使得 EditText 响应事件 ---- 解决思路 当触摸的是EditText & 当前EditText可滚动时...,则将事件交给EditText处理,即进行滚动 否则将事件交由其父类处理,即交给ScrollView进行滚动 具体实现方案 复写EditText的onTouch()并 采用 requestDisallowInterceptTouchEvent...(true)进行触碰事件拦截 关于为什么可以拦截事件,可以看看我写的事件分发机制:Android事件分发机制 详解攻略,您值得拥有 public class MainActivity extends...与嵌套的EditText滑动冲突问题哦。

    58120
    领券