android - Android 滚动视图如何在内部工作?
问题描述
我很想了解 ScrollView 是如何工作的。ScrollView 做了许多有趣的事情,例如仅显示其全部内容的一部分并根据用户的触摸事件使其移动。
我尝试阅读..../Library/Android/sdk/sources/android-29/android/widget/ScrollView.java
以了解 ScrollView 的内部机制,但它太复杂了,我无法掌握。有人可以分解它的基本原理并解释它是如何工作的吗?
如果我要编写自己的滚动视图,我应该怎么做,关于 Android 的 UI 内部机制,我应该了解哪些基本概念?
解决方案
最重要的几点:
- 当用户开始拖动时,它会覆盖
public boolean onInterceptTouchEvent(MotionEvent ev)
负责启动实际触摸事件的那个。 - 当拦截返回 true 时
ScrollView
,接受触摸事件并public boolean onTouchEvent(MotionEvent ev)
开始被调用。它只是跟踪拖动距离并计算用户所做的任何投掷。 - 在拖动或投掷动画期间
public void scrollTo(int x, int y)
被调用。这是有效地将可见偏移应用于所有子项的核心方法。
源文件本身非常复杂,因为它处理边缘情况和更“无聊”的东西,如键盘滚动、焦点导航、可访问性事件等。
推荐阅读
- firebase - Flutter - 您的 Cloud Firestore 数据库具有不安全的规则
- linux - 如何使用 shuf 命令生成随机 ipv4 地址?
- c# - 为什么 HomeGraph API 上的 Request Sync 会返回 403 Forbidden?
- c - 直接传递变量地址和在C中传递指针(指向同一个变量)之间的区别?
- c++ - Linux 承诺提供比它所能提供的更多的内存
- haskell - 在 Haskell 中 a : -> b 是什么意思?
- python - Pandas:时间列添加并重复所有行一个月
- algorithm - 创建点云的最小边界框组合的算法
- delphi - 有没有办法在 Delphi 中制作一个“子枚举”数组?
- python - 无需拼接图像的 OpenCV 曝光补偿