今天开发遇到一个需求就是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);}@Overrideprotected 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(){@Overridepublic 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坐标上滑动的距离(高度),这样实现自动滚动的原理就明确了。

更多相关文章

  1. Android(安卓)完全退出应用方法
  2. Android中onActivityResult方法总结
  3. android Support Annotations(注解支持)
  4. 异步加载注意的事项
  5. Android9.0 SIM卡初始化---更新数据(代码 高通9.0代码)
  6. Android(安卓)WMS分析(一) WindowManager
  7. Android(安卓)studio 添加依赖库的方法
  8. Android关于PagerAdapter的使用方法的总结
  9. Android(安卓)判断当前的界面是否是桌面的方法

随机推荐

  1. android在线更新的SDK的脚本,
  2. Android开发周报:Android将使用OpenJDK、R
  3. Android中_TextView属性的XML详解 包括单
  4. Android中的多点触控(装载)
  5. Android获取经纬度,计算距离,方位角
  6. Android(安卓)开发加速器 Jetpack(1)
  7. USB 配件概述
  8. Scala:未受重视却潜力巨大的Android编程语
  9. 引路蜂Android技术网站开通了
  10. Android:从程序员到架构师之路