首页 文章 精选 留言 我的

精选列表

搜索[android],共10000篇文章
优秀的个人博客,低调大师

Android下拖动任意View代码(使用属性动画,眼前一亮)

mLocalFrameLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLocalX = mLocalFrameLayout.getX() - event.getRawX(); mLocalY = mLocalFrameLayout.getY() - event.getRawY(); break; case MotionEvent.ACTION_MOVE: mLocalFrameLayout.animate() .x(event.getRawX() + mLocalX) .y(event.getRawY() + mLocalY) .setDuration(0) .start(); break; default: return false; } return true; } });

优秀的个人博客,低调大师

Android自定义View探索(三)—事件分发机制与滑动冲突处理

View的事件分发机制,其实就是对MotionEvent事件的分发机制,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,这个传递的过程就是分发过程。 一.View的事件分发机制 整体流程: dispatchTouchEvent()—>onTouch()—>onTouchEvent()—>onClick() dispatchTouchEvent():View事件分发的入口,返回值表示MotionEvent是否被消费。 onTouch():View需要处理事件时,如果它设置了onTouchListener,那么onTouchListener中的onTouch方法会被调用。如果onTouch方法返回false,那么View的onTouchEvent()方法会被调用;如果onTouch方法返回true,那么View的onTouchEvent()方法将不会被调用。onTouch()的优先级比onTouchEvent()的优先级更高。 onTouchEvent():View自身对于Touch处理的实现 ,返回结果表示是否消耗当前事件。 onClick() : View的onTouchEvent()的优先级比onClick()高,用于处理clickListener设置的点击事件。 二.ViewGroup的事件分发机制 整体流程: 图片来自 谷歌的小弟 当一个点击事件产生以后,它的传递过程遵循如下顺序:Activity—>Window—>外层ViewGroup。 外层ViewGroup接收到事件以后,就会按照事件分发机制去分发事件。如果这个ViewGroup的onInterceptTouchEvent()方法返回true,就表示它要拦截当前事件,接着事件就会交给这个ViewGroup来处理;如果这个ViewGroup的onInterceptTouchEvent()方法返回false,就表示它不拦截当前事件,接着事件就会交给它的子元素来处理。如果一个View的onTouchEvent()返回false,那么它的父容器的onTouchEvent()就会被调用。以此类推,如果所有的元素都不处理这个事件,那么这个事件最终会传递给Activity处理,即Activity的onTouchEvent()方法会调用。 三.相关知识点 1.同一个事件序列是指从手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个过程中所产生的一系列事件,这个事件序列以down事件开始,中间含有不定量的move事件,最终以up事件结束。 2.某个View一旦决定拦截,那么这一事件序列都只能由它来处理(如果事件序列能够传递给它的话),并且它的onInterceptTouchEvent()不会再被调用,这是因为系统会将同一事件序列内的其他方法都交给他处理。 3.某个View一旦开始处理事件,如果它不消耗ACTION_DOWN事件(onTouchEvent方法返回了false),那么同一事件序列中的其他事件都不会交给它来处理,并且事件将重新交给它的父元素处理,即父元素的onTouchEvent会被调用。 4.ViewGroup默认不拦截任何事件,即默认onInterceptTouchEvent返回false。View没有onInterceptTouchEvent方法,一旦有事件传递给它,它的 onTouchEvent方法就会调用。 5.事件传递过程是由外向内的,即事件总是先传递给父元素,然后再由父元素分发给子View,通过requestDisallowInterceptTouchEvent方法可以在子元素中干预父元素的分发过程,但是ACTION_DOWN事件除外。 四.滑动冲突的处理 内部拦截法:子View禁止父View拦截Touch事件 内部拦截法是指父容器不拦截任何事件,所有的事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交给父容器处理。让子View调用requestDisallowInterceptTouchEvent( )禁止父View对Touch的拦截即可,这样就可以解决滑动冲突的问题。 外部拦截法:父View中准确地进行事件分发和拦截 外部拦截法是指点击事件都先经过父容器拦截处理,如果父容器需要此事件就拦截,如果不需要就不拦截。我们可以重写父View中与Touch事件分发相关的方法—–onInterceptTouchEvent( )来进行处理,这样就可以解决滑动冲突的问题。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册