| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 实现简易版ScrollView -> 正文阅读 |
|
[移动开发]Android 实现简易版ScrollView |
前言学习过view内容滑动相关知识,想实践下view内容的滑动以及惯性滑动如何实现。 实现完整实现:https://github.com/18839779221/test/blob/main/app/src/main/java/com/example/scroll/ScrollLayout.kt ScrollView控件的高度和内容的高度前提:View只有当其内容高度大于控件高度的情况下,才能够竖直滑动。 使用过ScrollView的朋友应该会清楚,ScrollView只能有一个子控件,于是
? 本次自定义的控件希望直接定义一个可滑动的LinearLayout(一般LinearLayout的子控件可能超出屏幕范围),并不希望限制只有一个子控件,这样就需要手动计算内容的高度。通过重写onMeasure方法可以计算。
ScrollView的事件TOUCH_MOVE滑动事件(跟手滑动)跟手滑动操作中由于TOUCH_MOVE事件的频繁发生和滑动行为的不确定性,很难使用动画来实现,这里采用简单的scrollBy()方法来实现View滑动。 ? 我们应该保证View的滑动不会超出其上下边界,根据上图分析,我们需要保证scrollY的滑动范围为[0,totalHeight - height],可以通过View.canScrollVertically(direction: Int)方法来判断View是否可以朝指定方向继续滑动。
根据View.canScrollVertically(direction: Int)的源码,我们可以看到
可以看到默认range==0,也就是一定会返回false,想要使用该方法就必须做一些调整,下边来分析下什么方法需要重写
因此需要重写computeVerticalScrollRange()方法
处理滑动的完整代码
ScrollView的惯性滑动(Scroller实现)惯性滑动发生在用户滑动View的手指抬起后,一般结合VelocityTracker来获取手指抬起时的速度,根据此速度,来决定滑动的距离。 我们直接采用Scroller控件来方便的实现惯性滑动。
注意,VelocityTracker要能够计算出TOUCH_UP时的速度,必须将此次整个touch事件序列的event都传递给VelocityTracker。也就上边onTouchEvent()方法中使用到的velocityTracker.addMovement(event)。 此外Scroller只能计算出在相应时间点View应该滑动到的位置,实际的View滑动还需要依靠View.computeScroll()方法,根据其方法注释我们也可以看出其就是为了配合Scroller进行View滑动所预设的方法,因此我们需要重写此方法,以处理惯性滑动期间View的真实滑动。
ScrollView的惯性滑动(OverScroller实现)可以将上述Scroller视线中的scroller变量替换为OverScroller的实现可无缝切换到OverScroller
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 18:50:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |