Android中使用Scroller实现View的弹性滑动

在 Android 开发中,Scroller 类用于实现 View 的弹性滑动效果。它并不会直接滚动 View,而是用于计算滑动的偏移量,然后应用到 View 上。以下是 Scroller 实现 View 弹性滑动的主要步骤:

1. 初始化 Scroller

首先,在自定义 View 中创建一个 Scroller 实例:

private Scroller mScroller;public MyView(Context context) {super(context);mScroller = new Scroller(context);
}

2. 开始滑动

使用 startScroll() 方法启动滑动,指定起始位置、偏移量和持续时间:

public void smoothScrollTo(int destX, int destY) {int startX = getScrollX();int startY = getScrollY();int deltaX = destX - startX;int deltaY = destY - startY;mScroller.startScroll(startX, startY, deltaX, deltaY, 1000); // 1000ms = 1秒invalidate(); // 触发 View 的重绘
}

3. 计算偏移量并更新 View 位置

在 View 的 computeScroll() 方法中计算当前的滑动偏移量并更新 View 的位置:

@Override
public void computeScroll() {if (mScroller.computeScrollOffset()) { // 返回 true 表示动画未结束scrollTo(mScroller.getCurrX(), mScroller.getCurrY());postInvalidate(); // 继续触发 View 的重绘}
}

4. 触发重绘

Scroller 每次计算完偏移量后,调用 invalidate()postInvalidate() 方法触发 View 重绘。重绘时会调用 computeScroll() 方法,持续更新 View 位置,直到动画结束。

代码示例

以下是一个完整的示例,展示如何在自定义 View 中使用 Scroller 实现平滑滚动:

public class MyView extends View {private Scroller mScroller;public MyView(Context context) {super(context);mScroller = new Scroller(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 绘制内容}public void smoothScrollTo(int destX, int destY) {int startX = getScrollX();int startY = getScrollY();int deltaX = destX - startX;int deltaY = destY - startY;mScroller.startScroll(startX, startY, deltaX, deltaY, 1000); // 1000ms = 1秒invalidate();}@Overridepublic void computeScroll() {if (mScroller.computeScrollOffset()) { // 返回 true 表示动画未结束scrollTo(mScroller.getCurrX(), mScroller.getCurrY());postInvalidate();}}
}

总结

  • Scroller 类本身不处理实际的视图滚动,而是计算滑动的偏移量。
  • 通过调用 startScroll() 方法启动滑动,并指定起始位置、偏移量和持续时间。
  • computeScroll() 方法中计算当前的滑动偏移量,并更新 View 的位置。
  • 调用 invalidate()postInvalidate() 方法触发 View 重绘,确保动画持续进行。

这样,通过 Scroller 类的配合,可以实现 View 的平滑、弹性滑动效果。
另外

有什么技术问题欢迎加我交流 qilebeaf
本人10多年大厂软件开发经验,精通Android,Java,Python,前端等开发,空余时间承接软件开发设计、课程设计指导、解决疑难bug、AI大模型搭建,AI绘图应用等。
欢迎砸单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想拥有一个独一无二的AI人物?Lora炼丹训练模型教程来啦

之前答应过大家放出来的Lora本地训练教程,终于写好啦。 会训练lora,代表着你可以生成属于你的独一无二的角色。 你可以让这个角色在各种不同背景的地方出现,可以让它摆出各种姿势,满足你的无限幻想。 还有的商家,用…

Centos 7 或 8配置国内yum源及epel源-1

官方教程 Yum工具详解 清理Yum缓存:[rootqfedu.com ~]# yum clean all缓存软件包信息: 提高搜索/安装软件的速度[rootqfedu.com ~]# yum makecache查询yum源信息: [rootqfedu.com ~]# yum repolist 查找软件:[rootqfedu.com ~]# yum search mysql 此命令会搜索到系…

10分钟安装好torch的GPU版本(Windows)

pytorch-gpu 1. 确定cuda版本2. 确定Python版本3 开始下载-cu118-cp383.1 下载cuda3.2 下载torchvision 4.下载好了5.开始安装6. 开始验证 1. 确定cuda版本 nvcc -V 版本为11.8 , 一会下载的版本为cu118 2. 确定Python版本 确定python版本为为3.8,一会下载为cp38 3 …

Java包介绍

今天看jdk文档,顺便写一下java几个包的作用。 java.applet 主要用于创建java applet小应用程序,可以嵌入到网页中能够呈现出特殊的效果,现在基本已经被废弃,很少使用。 java.awt AWT 是Abstract Window ToolKit (抽象窗口工具包…

体验一下 Qwen-Agent

体验一下 Qwen-Agent 1. 什么是 Qwen-Agent2. 安装 Qwen-Agent3. 运行示例一代码4. 运行示例二代码 1. 什么是 Qwen-Agent Qwen-Agent是一个开发框架。开发者可基于本框架开发Agent应用,充分利用基于通义千问模型(Qwen)的指令遵循、工具使用…

猫头虎分享已解决Bug: Illegal State Exception: java.lang.IllegalStateException

猫头虎分享已解决Bug: Illegal State Exception: java.lang.IllegalStateException 🐯 摘要 📄 大家好,我是猫头虎,一名专注于后端技术的博主。在日常开发中,我们经常会遇到各种各样的Bug,其中Illegal St…

Python基础教程(二十七):urllib模块

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

ssl证书90天过期?保姆级教程——使用acme.sh实现证书的自动续期

腾讯云相关文档相关参考-有的点不准确 前言 最近https到期了,想着手动更新一下https证书,结果发现证书现在的有效期只有90天,于是想找到一个自动更新证书的工具,发现了acme.sh,但是网上的文章质量参差不齐&#xff0…

数据结构——二分算法

二分查找 1. 在排序数组中查找元素的第一个和最后一个位置 代码实现&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/int binarySearch(int *nums, int numsSize, int target) {int l 0, r numsSize - 1; while (l <…

【面试题】前端 移动端自适应?_前端移动端适配面试题

设备像素比 设备像素比 (DevicePixelRatio) 指的是设备物理像素和逻辑像素的比例 。比如 iPhone6 的 DPR 是2。 设备像素比 物理像素 / 逻辑像素。可通过 window.devicePixelRatio 获取&#xff0c;CSS 媒体查询代码如下 media (-webkit-min-device-pixel-ratio: 3), (min-…

6.折半查找

折半查找 基本思路在有序表中,取中间元素作为比较对象,若给定值与中间元素的要查找的数相等,则查找成功;若给定值小于中间元素的要查找的数,则在中间元素的左半区继续查找;若给定值大于中间元素的要查找的数,则在中间元素的右半区继续查找。不断重复上述查找过 程,直到查找成功…

揭秘循环购:消费即收益,如何助力商家月销百万?

大家好&#xff0c;我是吴军&#xff0c;今天要和大家分享一种颠覆性的商业模式——循环购。你是否听说过“消费1000送2000”这样的促销活动&#xff1f;是不是觉得太不可思议&#xff0c;商家岂不是在“送钱”&#xff1f;别急&#xff0c;让我为你揭开这背后的秘密。 循环购&…

C和C++实现stack的对比

本篇文章&#xff0c;我们将对比C语言和C实现栈的不同来体会C的魅力&#xff01; 1.栈的介绍 栈&#xff08;Stack&#xff09;是一种常见的数据结构&#xff0c;它是一种特殊的线性表&#xff0c;只允许在一端进行数据的插入和删除操作。这一端通常被称为栈顶&#xff08;Top…

路由器ARP和ARP-proxy(华为)

#交换设备 路由器ARP和ARP-proxy(华为) 当一个广播域中的主机想要访问另外一个广播域的主机时&#xff0c;会广播ARP报文&#xff0c;询问目标IP地址所对应的MAC地址&#xff0c;默认情况下&#xff0c;arp记录是设备自动生成的&#xff0c;但是这样会容易受到ARP欺骗攻击&am…

python实训day4

1、查看数据库的版本 2、查看当前用户 3、查看当前数据库 4、计算表达式的结果; 任何一个数据库,无论大小,都首先是一个超级计算器 5、查看当前MySQL环境中所有的数据库; 系统数据库(只能看)和自定义数据库(任何操作) 6、先建数据库 gaoming 7、如果表已经存在,则创建不能成功 …

韩国警告不要投资数字货币现货 ETF,强调经济风险

首尔&#xff0c;2024 年 6 月 24 日——韩国金融研究所 (KIF) 发布了一份警告报告&#xff0c;反对推出数字货币现货 ETF&#xff0c;称其存在重大经济风险。根据该报告&#xff0c;推出此类 ETF 可能会导致资源配置效率低下、金融市场波动加剧以及整体金融稳定性减弱。 韩国…

【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4

【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 部署了服务端。需要对其测试【ai】tx2-nx 查看 jetpack 版本信息及对应的tritonserver【ai】tx2-nx:配置tritonserver2.17.0-jetpack4.6 环境并运行例子C++ Triton YoloV4 client 是基于 r21.05的 服务端的tensort 的…

springboot3 连接 oceanbase + logproxy数据同步到redis

我这用的是 社区版的 单机&#xff0c; rocky liunx 安装oceanbase 注意事项&#xff1a; logproxy 是 CDC 模式 &#xff0c; springboot 可以直接订阅 canal 是 binlog模式&#xff0c; canal 订阅 logproxy&#xff0c; springboot 订阅 canal logproxy 也可以转 bi…

嵌入式实验---实验七 SPI通信实验

一、实验目的 1、掌握STM32F103SPI通信程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6通过74HC595控制一位LID数码管&#xff0c;实现以下两个要求&#xff1a; &#xff08;1&#xff09;数码管从0到9循环显示&#xff1b; …

无人机巡检小羊仿真

详细视频地址 仿真效果 可视化三维仿真 gazebo物理仿真 px4 飞控仿真 仿qgc简易地面站 详细视频地址