ScrollView简单自动滚动问题总结

2023-11-03

今天参考网上的资料写了一个简单的动画,刚开始的时候,确实困难重重:

1、当我们在Activity里面获得View对象的时候,无论是getMeasuredHeight()还是getHehgit()方法(放在Activity里的onCreate,onStart,onResum),返回值一律为零。

2、无法使ScrollView的内容从最底部开始向上滑动(一开始ScrollView为空白,但是内容由下向上慢慢上移)

3、对ScrollView的scrollBy与scrollTo方法区别不是太熟悉;

在网上查询资料:

1. 在一个类初始化时,即在构造函数当中是得不到View的实际大小的(这个我测试过,的确)。大家可以试试,getWidth()和getMeasuredWidth()得到的结果都是0,但是可以从onDraw()方法或者dispatchDraw()方法里面获得。可以通过调用invalidate()来执行onDraw()和dispatchDraw()方法。

2. 这两个方法所得到的结果的单位是像素即pixel

getWidth(): View在设定好布局后,整个View的宽度

getMeasuredWidth():对View上的内容进行测量后得到的View内容占据的宽度。前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0);(measure参数的值可以知己定义),否则得到的结果和getWidth()得到的结果是一样的。

这两个方法最主要的区别在于,是否使用了measure()方法,同时measure()使用的位置也很重要。

getHeight() 和 get MeasuredHeight() 区别同理。




经过我的测试(不知道有没有别的方法),ScrollView是不能开始就显示在最底层的,只能在最上面添加一个控件,这里我添加了一个TextView空的空间,这样在开始显示的ScrollView的时候,是空的,感觉是内容慢慢开始向上移动




 scrollTo() 是直接指定滚动条的位置, 但是由于这个动作不是单纯关于 ScrollView 而已, 还要根据 ScrollView 里面包含的View 的实际信息. 所以这动作必须在页面加载完成以后才能执行.    在Activity 初始化过程中, 要指定滚动条位置, 必须用下面的代码

  1. sView.post(new Runnable() {  
  2.     @Override  
  3.     public void run() {  
  4.         sView.scrollTo(sViewX, sViewY);  
  5.     }   
  6. });  
sView.post(new Runnable() {
    @Override
    public void run() {
        sView.scrollTo(sViewX, sViewY);
    } 
});


滚动代码如下:

  1. public class MainActivity extends Activity {  
  2.     private final Handler mHandler = new Handler();  
  3.   
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.         iniHolder();  
  9.     }  
  10.   
  11.     private void iniHolder() {  
  12.         Holder.scroll = (ScrollView) findViewById(R.id.sv_scroll);  
  13.         Holder.mlayout = (LinearLayout) findViewById(R.id.l_test);  
  14.         Holder.tv_null = (TextView) findViewById(R.id.tv_null);  
  15.         Holder.tv_null.setHeight(getWindowManager().getDefaultDisplay()  
  16.                 .getHeight() - 50);  
  17.     }  
  18.   
  19.     @Override  
  20.     protected void onResume() {  
  21.         super.onResume();  
  22.         System.out.println(Holder.mlayout.getMeasuredHeight() + ":"  
  23.                 + Holder.scroll.getHeight());  
  24.         Holder.scroll.post(ScrollRunnable);  
  25.     }  
  26.   
  27.     private Runnable ScrollRunnable = new Runnable() {  
  28.         @Override  
  29.         public void run() {  
  30.             int off = Holder.mlayout.getMeasuredHeight()  
  31.                     - Holder.scroll.getHeight();// 判断高度,ScrollView的最大高度,就是屏幕的高度  
  32.             if (off > 0) {  
  33.                 Holder.scroll.scrollBy(0, 2);  
  34.                 if (Holder.scroll.getScrollY() == off) {  
  35.                     Thread.currentThread().interrupt();  
  36.                 } else {  
  37.                     mHandler.postDelayed(this, 10);  
  38.                 }  
  39.             }  
  40.         }  
  41.     };  
  42.   
  43.     static class Holder {  
  44.         static ScrollView scroll;  
  45.         static LinearLayout mlayout;  
  46.         static TextView tv_null;  
  47.     }  
  48. }  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ScrollView简单自动滚动问题总结 的相关文章

  • python:二叉树的递归遍历之前序遍历文字详解(基于力扣)

    目录 前言 二叉树 前序遍历 前言 这篇作为自己 理解二叉树递归 的记录 非常适合和我一样的新手朋友 二叉树 关于二叉树 我总结了下面几点 1 二叉树和链表相似 这里只说单链表 链表有一个指针 指向下一个节点 2 二叉树的每一个节点有两个指
  • C++ 监听进程结束

    include
  • linux Redhat Nginx 离线安装

    目标机器没有网络 只能下载各种Nginx依赖库 手动离线安装了 下载所需要的依赖环境和库 链接 https pan baidu com s 1u6TCHMTSNJYCWXTfmjRSxA 提取码 nikc 解压后传到Linux系统的 usr
  • 矩阵的旋转

    把矩阵A的行换成相应的列 得到的新矩阵称为A的转置矩阵 大家在 程序设计基础 的上机实验题目和平时的练习中肯定做过一些关于矩阵的题 其中最常见的就是矩阵的转置了 so 今天我们就不考矩阵的转置了 我们要考察一下矩阵的旋转 Input 输入包
  • C语言实现strlen的三种方法

    目录 1 strlen介绍 strlen 求字符串长度 2 如何使用strlen库函数 3 三种方法实现strlen 计数器法 递归法 指针 指针法 4 关于strlen返回值 1 strlen介绍 strlen 求字符串长度 size t
  • Mac AndroidStudio“GradleBuildRunning”特别慢的解决方法

    在mac上每次运行app特别慢 setting gradle下面也没有离线模式 原来在gradle的侧边栏中
  • idea使用service注解后,编译运行报错 找不到符号 类 service

    使用service注解后找不到服务类 jar包也存在
  • vue和java的前后端请求

    GetMapping value url produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • Forever Winter

    Forever Winter 题意 给一个像下面这样的图 要求第一圈分支和第二圈分支 下图的第一圈分支为5 第二圈分支为3 思路 求每个点的度 最内圈的分支的度是唯一的 找到即可 设为x 然后第二圈的分支为 n 1 x x n为总共节点上
  • 量化演示代码

    import numpy as np import copy def KL P Q out np sum P np log P Q return out def maxq value dynamic range np abs value m
  • C++一行输入多个数字(利用cin和空格)

    使用的方法颇为简单 利用了cin遇到空格就中断的特点 仅含有输入以及输出 欢迎大家一起交流 include
  • unity3d运行后自动暂停_在Unity中使用暂停的小技巧

    很多人在游戏中写暂停脚本的时候 经常会想到 Time timeScale 0 这种方法 但是 Time timeScale 只是能暂停部分东西 如果在 update 函数中持续改变一个物体的位置 这种位置改变貌似是不会受到暂停影响的 比如
  • 科学与AI之间的联系,许多AI的先驱科学家也是脑科学家

    从人工智能 artificial intelligence AI 发展的历史来看 我们可以清楚地看到脑科学与AI之间的联系 许多AI的先驱科学家也是脑科学家 使用显微镜发现的生物大脑的神经连接启发了人们对人工神经网络的研究 使用电子探测器发
  • 杭电OJ-ACM2036(改革春风吹满地)

    题目分析 原题给出的条件是通过多组数据的各个坐标 用逆时针表达 求出对应的 任意 多边形的面积大小 法一 Time Limit Exceeded Java版 主要思路 对一个多边形进行拆解 若含有n条边 记其坐标分别为 X0 Y0 X1 Y
  • 单相半桥逆变器仿真技巧

    1 拓扑与控制 单相半桥逆变器拓扑如下 电压环和电流环控制图如下 调制方式如下 2 仿真步骤 单相半桥逆变器的仿真应该遵循以下步骤 1 选择合适的滤波电感和滤波电容 一般是mH级别 2 选择合适的调制度 注意由于半桥电容电压波动过大 往往不
  • NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.

    更新镜像前是可以挂载的 使用SD卡更新成最新的debian系统镜像后就出现下面错误 mount home debian nfs rootfs bad option for several filesystems e g nfs cifs y
  • 下载bilibli网站视频

    https www videofk com bilibili video download bilibili https www videofk com bilibili video download search url https 3A
  • 第十届蓝桥杯 b组

    试题 A 组队 本题总分 5 分 作为篮球队教练 你需要从以下名单中选出 1 号位至 5 号位各一名球员 组成球队的首发阵容 每位球员担任 1 号位至 5 号位时的评分如下表所示 请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多
  • 【Python】Python 3.11 无法安装 Pytorch ,提示找不到包

    问题 Python 3 11 无法安装 Pytorch 在 pytorch 界面找到语句 cmd 中输入 pip3 install torch torchvision torchaudio extra index url https dow
  • Django显示html网页中静态图片

    Django中显示html网页中静态图片 新建static文件夹 images文件夹 静态图片 检查setting py INSTALLED APPS列表中是否有django contrib staticfiles DEBUG 值是否为Tr

随机推荐

  • Spring事务注解实现的原理

    Spring事务注解是个典型的Spring AOP的注解 方法上面加上 Transactional 方法就有了事务的能力 面试中 基于动态代理讲更多的东西 为什么呢 gt 其实里面核心也是动态代理 在一个使用了ProfitDetailSer
  • c语言printf,scanf的各种用法及易错点

    scanf详解 声明 int scanf const char format argument 返回值 Return Value Both scanf and wscanf return the number of fields succe
  • 机器学习(五)

    一 数据降维 一 特征选择 特征选择是去除一些与预测结果没有关系或者两个特征有高度关联的特征作为机器学习接下来训练集 这里举个例子 预测狗的品种 这里有毛的颜色 有没有牙齿 眼睛颜色 显然有没有牙齿这一特征与预测结果没有关系 这里则需要将这
  • Nerf(Representing Scenes as Neural Radiance Fields for View Synthesis)代码复现笔记

    前言 本文旨在帮助小白快速了解or学习复现出Nerf的代码 整体结构保持不变 不过会针对部分细节为了更好理解进行了修改 本文会相应更新讲解视频于B站 id 出门吃三碗饭 有问题到b站评论区留言 同步更新于 公众号 AI知识物语 B站讲解视频
  • numpy笔记

    文章目录 1 创建numpy变量 2 numpy和list进行转换 3 创建全0全1的numpy对象 4 统计学应用 1 求和 2 均值 3 标准差 4 均方差 5 数据处理 1 数据查找 2 数据排序 3 获取不重复的元素 4 取最大最小
  • 七:以理论结合实践方式梳理前端 React 框架 ——— React 状态管理

    react 状态机制 虽然 react 前面使用通过创建一个 context 上下链接 对象 基于 Provider 供应者 Consumer 消费者 来进行数据的获取 但这种方式局限于只能读取数据 对数据的其他操作还是需要通过 props
  • webbench源码剖析

    Webbench是有名网站压力测试工具 它是由Lionbridge公司开发 http www lionbridge com Webbench能测试处在相同硬件上 不同服务的性能以及不同硬件上同一个服务的运行状况 webbench的标准测试可
  • 【HTML5】登录页面制作简易版

    刚开始学习Java 文件的命名 讲道理应该以英文为主 但是英语又不好 所以只好用拼音 最痛苦的应该算是那些英语又不好 又想秀一下的程序员 一半英语一半拼音 如mainFangFa 你说看了糟心不糟心 目录 1 form表单定义和用法 1 1
  • leetcode解题之200. Number of Islands Java版(岛屿的数量)

    200 Number of Islands Given a 2d grid map of 1 s land and 0 s water count the number of islands An island is surrounded
  • 流的操作

    流 流按照方向分 分为两种输入流和输出流 是以内存作为参照物 当从数据源中 将数据读取到内存中时 叫做输入流 也叫读取流将内存中的数据写入到数据源时 叫做输入流 也叫写入流 流按照传输的内容分 分为 字节流 字符流 对象流 无论是哪一种流
  • python---发送邮件(zmail)

    前言 前面介绍了smtplib的发送邮件方式 今天安静在介绍一种通过zmail来进行发送邮件 但是这个zmail目前只支持python3的版本 那么都在2202年了应该都用python3了吧 zmail zmail目前只支持python3的
  • Arduino esp8266-3.0.1 离线安装

    Arduino esp8266 1 arduino添加开发板 arduino左上角菜单 文件 gt 首选项 出来的设置窗口可以看到 附加开发板管理器网址 添加以下两个网址进去 https arduino esp8266 com stable
  • 栈(Stack)——(二)链式存储实现

    之前的头插法天然满足先进后出 后进先出这个特点 所以我们可以使用链表 设计时选择表头 作为栈顶指针 而不是表尾 单向链表 不含头节点 不同于线式存储 所以不需要作判满操作 链式存储实现代码如下 因为有bool变量 用了C 实现 mystac
  • Amos实操教程

    Amos实操教程 中介效应检验 1 相关概念 2 主界面及功能 3 中介效应 4 中介效应检验步骤 1 相关概念 Amos是什么 Amos的全名是Analysis of Moment Structures 由James L Arbuckle
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    国密算法概述 及算法的集成应用 sm2 sm3 sm4 一 概述 二 分类概述 3 1 SM1对称密码 3 2 SM2椭圆曲线公钥密码算法 3 3 SM3杂凑算法 3 4 SM4对称算法 3 5 SM7对称密码 3 6 SM9标识密码算法
  • 【满分】【华为OD机试真题2023 JAVA&JS】最优资源分配

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最优资源分配 知识点数组贪心 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 某块业务芯片最小容量单位为1 25G 总容量为M 1 25G 对该芯片资源编号为1 2
  • win10 VS code 编译运行 C/C++的方法

    win10 VS code 编译运行 C C 的方法 具体配置过程如下链接 https zhuanlan zhihu com p 35178331 但中间出了点问题 CTRL ALT n 运行后 PS D C gt cd d C if gc
  • R语言apply()函数

    apply 函数是一种很强大的机制 apply 可把函数应用到数组的某个维度上 其函数的的一般格式为 apply x MARGIN FUN 其中 x为数据对象 MARGIN是维度的下标 FUN是由你指定的函 数 而 则包括了任何想传递给FU
  • Animator动画混合树

    Unity中的BlendTree BlendTree介绍 BlendTree BlendTree创建 一维混合 1D Blending 二维混合树 每个混合树的动画有一些要注意的地方 BlendTree介绍 Blend Tree用于多个动画
  • ScrollView简单自动滚动问题总结

    今天参考网上的资料写了一个简单的动画 刚开始的时候 确实困难重重 1 当我们在Activity里面获得View对象的时候 无论是getMeasuredHeight 还是getHehgit 方法 放在Activity里的onCreate on