Android监听ScrollView滑动距离的简单处理

 更新时间:2022年02月16日 13:51:03   作者:辉son  
这篇文章主要为大家详细介绍了Android监听ScrollView滑动距离的简单处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android监听ScrollView滑动距离的具体方法,供大家参考,具体内容如下

使用ScrollView时,有时候我们需要要获取它滑动的距离,Android的API给我们提供了设置监听的方法:

scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
            @Override
            public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            }
        });

很遗憾的是:Call requires API 23
点进去看下View里面的OnScrollChangeListener在哪个方法里面监听位置:

/**
     * This is called in response to an internal scroll in this view (i.e., the
     * view scrolled its own contents). This is typically as a result of
     * {@link #scrollBy(int, int)} or {@link #scrollTo(int, int)} having been
     * called.
     *
     * @param l Current horizontal scroll origin.
     * @param t Current vertical scroll origin.
     * @param oldl Previous horizontal scroll origin.
     * @param oldt Previous vertical scroll origin.
     */
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        notifySubtreeAccessibilityStateChangedIfNeeded();

        if (AccessibilityManager.getInstance(mContext).isEnabled()) {
            postSendViewScrolledAccessibilityEventCallback();
        }

        mBackgroundSizeChanged = true;
        if (mForegroundInfo != null) {
            mForegroundInfo.mBoundsChanged = true;
        }

        final AttachInfo ai = mAttachInfo;
        if (ai != null) {
            ai.mViewScrollChanged = true;
        }

        if (mListenerInfo != null && mListenerInfo.mOnScrollChangeListener != null) {
            mListenerInfo.mOnScrollChangeListener.onScrollChange(this, l, t, oldl, oldt);
        }
    }

一看其实实现不难,不就是自定义个ScrollView, 里面多写个监听, 实现如下:

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

/**
 * Created by hucanhui on 16/7/28.
 */
public class ObservableScrollView extends ScrollView{
    private OnScollChangedListener onScollChangedListener = null;

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

    public ObservableScrollView(Context context, AttributeSet attrs,
                                int defStyle) {
        super(context, attrs, defStyle);
    }

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

    public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) {
        this.onScollChangedListener = onScollChangedListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (onScollChangedListener != null) {
            onScollChangedListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }

    public interface OnScollChangedListener {

        void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);

    }
}

使用简单:

scrollView.setOnScollChangedListener(new ObservableScrollView.OnScollChangedListener() {
            @Override
            public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy){
            }
        });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android实现dialog的3D翻转示例

    Android实现dialog的3D翻转示例

    这篇文章主要介绍了Android实现dialog的3D翻转示例,非常具有实用价值,需要的朋友可以参考下
    2017-08-08
  • Android实用小技巧之利用Lifecycle写出更好维护的代码

    Android实用小技巧之利用Lifecycle写出更好维护的代码

    lifecycle是一个类,用于存储有关组件(如Activity或Fragment)的生命周期状态的信息,并允许其他对象观察此状态,下面这篇文章主要给大家介绍了关于Android实用小技巧之利用Lifecycle写出更好维护的代码的相关资料,需要的朋友可以参考下
    2022-05-05
  • Android AndFix热修复原理详情

    Android AndFix热修复原理详情

    这篇文章主要介绍了Android AndFix热修复原理详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值吗,需要的小伙伴可以参考一下
    2022-08-08
  • android开发教程之ubuntu使用adb连接小米2的步骤和adb调试方法

    android开发教程之ubuntu使用adb连接小米2的步骤和adb调试方法

    这篇文章主要介绍了ubuntu中使用adb连接小米2的步骤和adb调试方法,需要的朋友可以参考下
    2014-02-02
  • 浅谈Android RecyclerView 间距全适配

    浅谈Android RecyclerView 间距全适配

    本篇文章主要介绍了浅谈Android RecyclerView 间距全适配,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Android Studio 自定义Debug变量视图的方法

    Android Studio 自定义Debug变量视图的方法

    这篇文章主要介绍了Android Studio 自定义Debug变量视图的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Android自定义圆环倒计时控件

    Android自定义圆环倒计时控件

    这篇文章主要为大家详细介绍了Android自定义圆环倒计时控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 谈谈Android6.0运行时的权限处理

    谈谈Android6.0运行时的权限处理

    之前有人在 Android 6.0 的机型上运行了DragGridView结果出异常奔溃了。想必问题的原因大家都知道,是Android 6.0新引入了在运行时权限申请(Runtime Permissions)的功能。那么这所谓的运行时申请权限究竟是怎么一回事呢,下面跟着小编一起来看看吧!
    2016-08-08
  • 解析Android中Animation动画的编写要点

    解析Android中Animation动画的编写要点

    这篇文章主要介绍了Android中Animation动画的编写要点,讲解了Animation的几个常用标签的用法,需要的朋友可以参考下
    2016-04-04
  • Android 消息机制以及handler的内存泄露

    Android 消息机制以及handler的内存泄露

    这篇文章主要介绍了Android 消息机制以及handler的内存泄露的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论