Android中的SrollView滚动详解
今天开发遇到一个需求就是ScrollView中嵌套一个ListView,同时需要实现滑动到底部自动加载更多,我们知道ListView滑动到底部简单实现onScrollListener()监听器即可,但是ScrollView中没有这么方便了,这个时候需要从写ScrollView组件;
public class ScrollBottomScrollView extends ScrollView { public ScrollBottomScrollView(Context context) {
super(context);
} public ScrollBottomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
} public ScrollBottomScrollView(Context context, AttributeSet attrs,int defStyle) {
super(context, attrs, defStyle);
} @Override
protected void onScrollChanged(int l, int t, int oldl, int oldt){
Log.e("Range", computeVerticalScrollRange()+"");
if(t + getHeight() >= computeVerticalScrollRange()){
//滑动到底部,doSomething();
}
} }
注意:
1.computeVeritcalScrollRange()方法是获取ScrollView中子布局的实际高度(可能超过屏幕的高度)
2.t是代表ScrollView滑动停止之后距离屏幕顶部的距离,getHeight方法是获取ScrollView的高度(不包括超出屏幕的高 度),这样如果 滑动的距离在加上ScrollView的高度大于等于ScrollView中子布局的实际高度,说明ScrollView不能再
滑动了,就停 止了。
下面在看一下怎么实现ScrollView自动滚动,并且滚动到底部停止了:
final int off = layout.getHeight() - scroll.getHeight();
scroll.post(new Runnable(){
@Override
public void run() {
scroll.scrollBy(0,1);
if(scroll.getScrollY() == off){
Thread.currentThread().interrupt();
}else{
scroll.post(this);
}
}});
layout是ScrollView的子布局(我们知道ScrollView中只能有一个子布局),变量off就是ScrollView能够滑动的距离是多少。其实这里的layout.getHeight()获取到的值和上面的computeVeritcalScrollRange()方法返回的值一样的,就是ScrollView子布局的实际高度(包括超出屏幕的高度),同时这里的off其实就是ScrollView滑动停止之后的上面的t值,在这里使用post方法,进行更新布局,同时这里还有一个方法就是scroll.scrollBy()这个方法,这个方法顾名思义就是scroll滑动的位移值(第一参数是left,第二个参数是top),同时它还有一个方法就是scrollTo()方法,这个意思也很明确,就是scroll滑动到指定的位置,还有就是scroll.getScrollY()方法是scroll在Y坐标上滑动的距离(高度),这样实现自动滚动的原理就明确了。
Android中的SrollView滚动详解的更多相关文章
- Android中的windowSoftInputMode属性详解
这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下 在前面的一篇文章中 ...
- Android中Service的使用详解和注意点(LocalService)
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
- Android中SurfaceView的使用详解
Android中SurfaceView的使用详解 http://blog.csdn.net/listening_music/article/details/6860786 Android NDK开发 ...
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- Android中Application类的详解:
Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...
- Android 中的消息传递,详解广播机制
--------------------------------------广播机制简介--------------------------------------------- Android中的广 ...
- Android中的sharedUserId属性详解
在Android里面每个app都有一个唯一的linux user ID,则这样权限就被设置成该应用程序的文件只对该用户可见,只对该应用程序自身可见,而我们可以使他们对其他的应用程序可见,这会使我们用到 ...
- Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...
- Android中数据库的操作流程详解
Android中数据库的操作方法: 1.Android平台提供了一个数据库辅助类来创建或打开数据库. 这个辅助类继承自SQLiteOpenHelper类.继承和扩展SQLiteOpenHelper类主 ...
随机推荐
- Angularjs书写规范
文件命名原则: 遵循以描述组件功能,然后是类型(可选)的方式来给所有的组件提供统一的命名 命名:feature.type.js. 测试文件名(feature.type.spec.js) 大多数文件都有 ...
- gif,jpg(jpeg),png,webp,base64图片格式比较
对于web前端开发的同学来说,图片保存格式非常的重要.那么该如何选择图片保存的格式呢?下面我总结一下gif,jpg,png等图片格式的区别. gif是很早应用的一种图片格式.它采用的是lzw的压缩算法 ...
- PHP ftp_connect() 函数
定义和用法 ftp_connect() 函数打开 FTP 连接. 当连接打开后,您就可以通过服务器来运行 FTP 函数了. 语法 ftp_connect(host,port,timeout) 参数 描 ...
- CTSC2019
(upd:随机立方体AC) 太菜了只会部分分.以后慢慢补坑吧…… 随机立方体: 30分: 正常人都能想到的的转移状态(我的确是弱智),从大往小填数,记录有多少个极大值点和三个方向上各占了多少.转移可以 ...
- LInux多线程编程----线程特定数据的处理函数
1.pthread_key_t和pthread_key_create() 线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了?大家都知道,在多线程程 ...
- A. Srdce and Triangle--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
如下图这是“今日头条杯”首届湖北省大学程序设计竞赛的第一题,作为赛后补题 题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 Let be a regualr tr ...
- ORM-Dapper:Dapper列表
ylbtech-ORM-Dapper:Dapper列表 1.返回顶部 1.1. https://dapper-tutorial.net/ 1.2. 2.1. https://www.nuget.org ...
- eclipse spring boot 项目出现java.lang.ClassCastException 解决方法
问题 eclipse spring boot 项目出现java.lang.ClassCastException 解决方法: 重新生成项目
- 剑指offer——50最长不含重复字符和子字符串
题目: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含’a~z”的字符.例如,在字符串“arabcacfr"中,最长的不含重复字符的子字符串 ...
- 020_JUC
JUC Java.util.Concurrent 并发包 池的顶级接口 Executor 子接口 ExecutorService 工具类 Executors(Collections.Arrays .. ...