Android 监听ScrollView滚动距离

场景

  这些天,公司要给应用新增一个公告的功能,其中有一个详情列表,里面显示的是公告内容和附件,于是我第一反应是想到了最近常用的CoordinatorLayout布局。当一个人习惯了什么的时候,遇到相关的东西或事情第一时间浮现在眼前的都会是那个习惯的事物。于是我辛辛苦苦的花了时间把这个详情页做好了。后来IOS问了设计一句详情页要有滚动条吗?我坐在后面听到了很感动,简直感动到想哭。
  后来设计问了IOS是怎么实现的,然后发现两边的实现方式有些出入了,于是设计就让我在详情页上加上滚动条,并且附件的TITLE栏不需要置顶了,我听了以后很感动,简直感动到想哭。

行动

  既然有需求,咱拿工资的就不好说不字了,还是乖乖改吧。哪天设计负气走人了那主管还不得算到我头上来。
  脑子里思考着要怎么实现这一需求。在平时开发的过程中,还真的蛮少用到ScrollView这东西的,而且公司应用里也很少会有滚动条这种东西,也许是因为之前设计没明确,开发也没注意也就形成了这样的情况。后来想到了就用监听ScrollView滚动的方法吧,这样就可以根据ScrollView滚动的距离来显示和隐藏页面的Title了,Nice!!!
  可是到动手写代码的时候发现真是渣渣。和想的完全不一样啊,哪里来的监听啊,有API版本的限制啊哥哥。那么还要我怎样,于是只能找度娘咯,虽然我水平不行啊。

代码

  网上有一个比较好的解决方案是集成ScrollView重写里面的一个监听滚动的方法,在里面加个监听就可以了。
  自定义ScrollView如下:

package XXX;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

/**
 * Created by LiHuan on 2018/2/1.
 */

public class MyScrollView extends ScrollView {

    private OnScrollChangedListener mOnScrollChangedListener;

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mOnScrollChangedListener != null) {
            mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
        }
    }

    public void addOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener) {
        this.mOnScrollChangedListener = onScrollChangedListener;
    }

    public interface OnScrollChangedListener {
        public void onScrollChanged(int l, int t, int oldl, int oldt);
    }
}

  随后直接使用在布局文件中,并通过addOnScrollChangedListenr()的方法进行设置滚动监听即可。


点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注