Android 触摸事件剖析:从分发链到滑动冲突
Android 触摸事件剖析:从分发链到滑动冲突触摸是 Android 交互最基础的方式,但事件分发的"U 型链"、拦截与消费的规则、以及常见的滑动冲突,常常让人困惑——为什么子 ListView 收不到事件?为什么父布局一拦截,子 View 就再也滑不动?要彻底搞懂,必须理解事件分发的完整链路。本文从三个核心方法入手,讲透 MotionEvent 序列的流转与 mFirstTouchTarget
加入于 2019-10-06
不忘初心的阿甘
598
文章
41
评论
Android 触摸事件剖析:从分发链到滑动冲突触摸是 Android 交互最基础的方式,但事件分发的"U 型链"、拦截与消费的规则、以及常见的滑动冲突,常常让人困惑——为什么子 ListView 收不到事件?为什么父布局一拦截,子 View 就再也滑不动?要彻底搞懂,必须理解事件分发的完整链路。本文从三个核心方法入手,讲透 MotionEvent 序列的流转与 mFirstTouchTarget
Android ScrollView 详解:从使用到原理与嵌套冲突ScrollView 是 Android 里最基础的"可滚动容器",看似简单,真到实战却处处是坑:嵌套 ListView 只显示一行、和 ViewPager 抢滑动、监听不到滚动方向、滚不到底、拉到边缘有碍眼的蓝色回弹……本文把 ScrollView 的基本使用、滑动监听、滚到顶底、滑动冲突、嵌套列表、消除回弹、底层原理一次性讲透—

NavigationView1、NavigationViewNavigationView是专为配合DrawerLayout的侧边栏使用的。关于DrawerLayout这里不多说了,详细用法参考我的另一篇博客抽屉布局DrawerLayout在布局文件中添加NavigationView,作为DrawerLayout的侧边栏拉出。注意属性layout_gravity="start",从左侧屏幕边缘拉出导

SwipeRefreshLayout 下拉刷新是经常遇到的场景,Android官方为我们提供了一个下拉刷新控件,准确的来说是容器。官方文档说明,SwipeRefreshLayout只能有一个子View,这一点和ScrollView一样。1、布局中添加SwipeRefreshLayout 使用SwipeRefreshLayout需要在build.gradle中添加额外的依赖,因为这属于materia

DrawerLayout大多数APP都会提供侧边菜单,在手机屏幕的左测或者右侧从外向内滑动拉出一个菜单。就是用DrawerLayout实现的,Android官方提供的侧边菜单栏。1、布局中添加DrawerLayoutDrawerLayout作为布局的根标签。主布局LinearLayout一定要放在紧接着第一个位置。而且大小一定要设置成match_parent2、添加侧边菜单在DrawerLayou

ViewFlipper同样是滚动视图,可以作为APP首页的banner。效果和ViewPager一样,名气却远不如ViewPager。1、使用ViewFlipperViewPager是通过设置ViewPagerAdapter添加数据的,如何向ViewFlipper中添加View呢?2、布局中添加子控件直接在布局中ViewFlipper节点下添加控件,所有在ViewFlipper节点下的控件都会被当

MySql备份命令mysqldump ,站点数据备份网站一直放在华为云,但是今年年底到期。也不打算续了,备案太麻烦。准备迁移到阿里云,就要备份博客数据、图片、文件、文章都先备份到本地。1、mysqldump备份最开始创建站点的时候,网址的所有数据表都放在xiuno4这个数据库中。只需要备份这个数据即可。备份MySql数据库有多种方法,这里只用mysqldump命令进行备份:-u root 是用户名

按键KEYCODE1、onKeyOnKeyListener 监听接口,OnKeyListener只检测控制键,不会检测文本键(数字、字幕、标点等),实现onKey()方法:给指定的控件添加OnKeyListener注意:①返回true表示处理完,不再进行Key事件的分发。返回false,表示继续向后面处理,比如输入到EditText中。②onKey()每次都会收到两次重复的按键编码,一次是KeyE

1、扫描手机已安装APP 通过PackageManager可以获取手机端已安装的apk文件的信息1.1、获取本机所有已安装应用PackageManager通过getInstalledPackages(flag)获取,传入flag为0表示所有APP。1.2、获取本机系统应用(packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM