Android中ScrollView实现滑动距离监听器的方法

 更新时间:2016年10月10日 14:15:04   投稿:daisy  
ScrollView相信对每位Android开发者们来说都不陌生,所以这篇文章给大家主要介绍了Android中ScrollView实现滑动距离监听器的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。

前言

众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当然在API 23中有setOnScrollChangeListener(View.OnScrollChangeListener l)可以使用,但是并不兼容低版本的API。那怎么办呢?只好重写ScrollView来实现对滑动距离的监听了。

话不多说,直接上代码:

public class MyScrollView extends ScrollView {

 private OnScrollListener listener;

 /**
 * 设置滑动距离监听器
 */
 public void setOnScrollListener(OnScrollListener listener) {
  this.listener = listener;
 }

 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);
 }

 // 滑动距离监听器
 public interface OnScrollListener{

 /**
 * 在滑动的时候调用,scrollY为已滑动的距离
 */
  void onScroll(int scrollY);
 }

 @Override
 public void computeScroll() {
  super.computeScroll();
  if(listener!=null){
   listener.onScroll(getScrollY());
  }
 }
}

上面重写的MyScrollView是在computeScroll()实现监听,因为ScrollView内部是通过Scroller来实现的,当滑动的时候会去调用computeScroll()方法,从而达到监听的效果。

当然还有另一种方法,就是在onScrollChanged(int l, int t, int oldl, int oldt)去监听,最后的效果是一样的:

public class MyScrollView extends ScrollView {

 private OnScrollListener listener;

 public void setOnScrollListener(OnScrollListener listener) {
  this.listener = listener;
 }

 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);
 }

 public interface OnScrollListener{
  void onScroll(int scrollY);
 }

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

总结

以上就是这篇文章的全部内容了,希望能对各位Android开发者们有所帮助,如果有疑问大家可以留言交流。

相关文章

  • PHP autoload 机制详解

    PHP autoload 机制详解

    本文主要介绍 PHP autoload 机制,这里整理了详细的知识资料供大家学习参考,希望能帮助有需要的小伙伴
    2016-08-08
  • Android 4.4以上

    Android 4.4以上"沉浸式"状态栏效果的实现方法

    Android与ios效果互仿早已不是什么稀奇的事,我猜大概这个效果来自ios吧,有争议说这种效果不能叫做沉浸式,叫透明状态栏更合适,我也感觉这和沉浸式的含义不太一致。但是大家都这么叫了,那就这样呗。下面来一起看看关于Android 4.4以上"沉浸式"效果的实现方法。
    2016-09-09
  • Android开源库自定义相机模块

    Android开源库自定义相机模块

    这篇文章主要为大家详细介绍了Android开源库自定义相机模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android自定义View实现心形图案

    Android自定义View实现心形图案

    这篇文章主要为大家详细介绍了Android自定义View实现心形图案,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 解析Android框架之Volley源码

    解析Android框架之Volley源码

    我们知道Volley是在2013年Google I/O大会上推出了一个新的网络通信框架,他的设计目的就是为了那些请求数据量不是特别大,但是又是特别频繁的网络操作非常适合。但是对于数据量较大的请求,比如说下载一个较大的文件,Volley可能相比于其他的框架,就有点不足了。
    2021-06-06
  • Android Listview滑动时不加载数据 停止时加载数据

    Android Listview滑动时不加载数据 停止时加载数据

    这篇文章主要为大家详细介绍了Android Listview滑动时不加载数据,停止时加载数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android 自定义一套 Dialog通用提示框 (代码库)

    Android 自定义一套 Dialog通用提示框 (代码库)

    这篇文章主要介绍了Android 自定义一套 Dialog通用提示框 (代码库),需要的朋友可以参考下
    2017-04-04
  • Android使用记录访问权限详解

    Android使用记录访问权限详解

    这篇文章主要介绍了Android使用记录访问权限的相关资料,文中介绍的很详细,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • android RecycleView实现下拉刷新和上拉加载

    android RecycleView实现下拉刷新和上拉加载

    这篇文章主要为大家详细介绍了android RecycleView实现下拉刷新和上拉加载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Android实现倒计时方法汇总

    Android实现倒计时方法汇总

    这篇文章主要为大家详细总结了Android实现倒计时的3种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01

最新评论