• 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坐标上滑动的距离(高度),这样实现自动滚动的原理就明确了。

  • 相关阅读:
    Solaris 11 让 ls 的输出 带上颜色
    Solaris11 Vsphere client tool 的鼠标问题
    VNC Viewer连接Cent OS 时的 复制粘帖 功能
    vSphere Client的拷贝 粘帖 功能
    更改CentOS7登录画面的分辨率
    一个故意消耗内存的java程序MemoryEater
    安装CentOS7文字界面版后,无法联网,用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
    windows 安装 Redis
    centos 安装postgresql 完整版
    centos 7 官网安装 PostgreSQL
  • 原文地址:https://www.cnblogs.com/roccheung/p/5797420.html
Copyright © 2020-2023  润新知