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使用SkinManager实现换肤功能的示例

    android使用SkinManager实现换肤功能的示例

    本篇文章主要介绍了android使用SkinManager实现换肤功能的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Android五种隐藏状态栏和标题栏的方法

    Android五种隐藏状态栏和标题栏的方法

    这篇文章主要介绍了Android五种隐藏状态栏和标题栏的方法的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android软件启动动画及动画结束后跳转的实现方法

    Android软件启动动画及动画结束后跳转的实现方法

    这篇文章主要介绍了Android软件启动动画及动画结束后跳转的实现方法,实例分析了Android图片播放及定时器的相关使用技巧,非常具有使用价值,需要的朋友可以参考下
    2015-10-10
  • Android自定义View实现价格区间选择控件

    Android自定义View实现价格区间选择控件

    这篇文章主要为大家详细介绍了Android如何利用自定义View实现价格区间选择控件,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-11-11
  • Android中的Fragment类使用进阶

    Android中的Fragment类使用进阶

    这篇文章主要介绍了Android中的Fragment类使用进阶,重点讲解了Fragment与Activity的交互以及Fragment间的数据传递,需要的朋友可以参考下
    2016-04-04
  • Android和iOS 测试五个最好的开源自动化工具

    Android和iOS 测试五个最好的开源自动化工具

    本文主要介绍Android和iOS 五个最好的开源自动化工具,这里整理了相关资料,希望能帮助测试软件的朋友,有需要的看下
    2016-09-09
  • Jetpack Compose Canvas绘制超详细介绍

    Jetpack Compose Canvas绘制超详细介绍

    Canvas 是允许您在屏幕上指定区域并在此区域上执行绘制的组件。您必须使用修饰符指定尺寸,无论是通过Modifier.size修饰符指定确切尺寸,还是通过Modifier.fillMaxSize,ColumnScope.weight等相对于父级指定精确尺寸。如果父级包装了此子级,则仅必须指定确切尺寸
    2022-10-10
  • OpenGL Shader实例分析(7)雪花飘落效果

    OpenGL Shader实例分析(7)雪花飘落效果

    这篇文章主要为大家详细介绍了OpenGL Shader实例分析第7篇,实现雪花飘落效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • android球形水波百分比控件代码

    android球形水波百分比控件代码

    本篇文章主要是介绍android球形水波百分比控件,现在很多地方都能用的,有需要的可以来了解一下。
    2016-11-11
  • android实现给未签名的apk签名方法

    android实现给未签名的apk签名方法

    下面小编就为大家带来一篇android实现给未签名的apk签名方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论