首页 > 解决方案 > Android 滚动视图如何在内部工作?

问题描述

我很想了解 ScrollView 是如何工作的。ScrollView 做了许多有趣的事情,例如仅显示其全部内容的一部分并根据用户的触摸事件使其移动。

我尝试阅读..../Library/Android/sdk/sources/android-29/android/widget/ScrollView.java以了解 ScrollView 的内部机制,但它太复杂了,我无法掌握。有人可以分解它的基本原理并解释它是如何工作的吗?

如果我要编写自己的滚动视图,我应该怎么做,关于 Android 的 UI 内部机制,我应该了解哪些基本概念?

标签: androidandroid-scrollview

解决方案


最重要的几点:

  1. 当用户开始拖动时,它会覆盖public boolean onInterceptTouchEvent(MotionEvent ev)负责启动实际触摸事件的那个。
  2. 当拦截返回 true 时ScrollView,接受触摸事件并public boolean onTouchEvent(MotionEvent ev)开始被调用。它只是跟踪拖动距离并计算用户所做的任何投掷。
  3. 在拖动或投掷动画期间public void scrollTo(int x, int y)被调用。这是有效地将可见偏移应用于所有子项的核心方法。

源文件本身非常复杂,因为它处理边缘情况和更“无聊”的东西,如键盘滚动、焦点导航、可访问性事件等。


推荐阅读