我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android scrollview如何监听滑动状态

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android scrollview如何监听滑动状态

ScrollView

视图的滚动过程,其实是在不断修改原点坐标。当手指触摸后,ScrollView会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那么ScrollView发送tracking events到被点击的subView;若是在计时器到点后发生了移动事件,那么ScrollView取消tracking自己促发滚动。

首先说一下 NestedScrollView 的滑动事件的监听,

如果使用 


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

这个方法在 API >= 23  时才可以使用,怎么解决呢 。我们可以自己定义一个ScrollView


public class MyScrollView extends NestedScrollView {
   private OnScrollChanged mOnScrollChanged;
  public MyScrollView(Context context) {
    this(context, null);
  }
  public MyScrollView(Context context, AttributeSet attributeSet) {
    this(context, attributeSet, 0);
  }
  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 (mOnScrollChanged != null) {
      mOnScrollChanged.onScroll(l, t, oldl, oldt);
    }
  }
  public void setOnScrollChanged(OnScrollChanged onScrollChanged) {
    this.mOnScrollChanged = onScrollChanged;
  }
  public interface OnScrollChanged {
    void onScroll(int l, int t, int oldl, int oldt);
  }
}

这样我们就可以通过实现 onScrollChanged() 监听滑动事件了 ,其中可以监测到滑动距离,这样就可以做好多事情了;

但是现在有一个需求就是【滑动的时候隐藏 一个靠边的悬浮框,不滑动是悬浮框显示出来】,这样的话就需要监测滑动状态了。scrollview 不像recyclerview一样可以监测滑动状态。

以下是我的一个实现方案,通过CountDownTimer 来实现

在刚才的onScrollChanged  接口中增加方法


public interface OnScrollChanged {
    void onScroll(int l, int t, int oldl, int oldt);
    void onTouch(boolean isDown);
  }

然后重写onTouchEvent方法


@Override
  public boolean onTouchEvent(MotionEvent ev) {
      switch (ev.getAction()) {
      case MotionEvent.ACTION_UP:
      case MotionEvent.ACTION_CANCEL:
        if (mOnScrollChanged != null) {
          mOnScrollChanged.onTouch(false);
        }
        break;
      case MotionEvent.ACTION_DOWN:
      case MotionEvent.ACTION_MOVE:
        if (mOnScrollChanged != null) {
          mOnScrollChanged.onTouch(true);
        }
        break;
    }
    return super.onTouchEvent(ev);
  }

这里的isDown=true代表是按下或者滑动的状态,对应ACTION_DOWN和ACTION_MOVE,fale代表ACTION_UP和ACTION_CANCEL

下面使用这个自定义的scrollerview


//静止状态
private final static int SCROLL_STATE_IDLE = 1;
//拖动或者惯性滑动状态
private final static int SCROLL_STATE_SCROLL = 2;
//判断是否是拖动状态
boolean isDragState = false;
int currentState = SCROLL_STATE_IDLE;
//这里采用100ms来判断是否已经是静止状态,100ms结束后证明是静止状态
private CountDownTimer scrollCountTimer = new CountDownTimer(100, 1) {
    @Override
    public void onTick(long millisUntilFinished) {
    }
    @Override
    public void onFinish() {
      setScrollState(SCROLL_STATE_IDLE);
    }
};
private void initScrollView() {
    scrollView.setOnScrollChanged(new MyScrollView.OnScrollChanged() {
      @Override
      public void onScroll(int l, int t, int oldl, int oldt) {
        if (isDragState) {//拖动状态单独处理不再进行滚动状态监测
          return;
        }
        //滑动时先取消倒计时,设置滑动状态
        scrollCountTimer.cancel();
        if(currentState != SCROLL_STATE_SCROLL) {
          setScrollState(SCROLL_STATE_SCROLL);
        }
        scrollCountTimer.start();
      }
      @Override
      public void onTouch(boolean isDown) {
        isDragState = isDown;
        //我这里把按下的状态默认为了滚动的状态,当然你也可以分开定义
        if (isDown) {
          scrollCountTimer.cancel();
          setScrollState(SCROLL_STATE_SCROLL);
        } else {
          scrollCountTimer.start();
        }
      }
});
//最后记得页面销毁时,cancel掉timer

总结

以上所述是小编给大家介绍的Android scrollview如何监听滑动状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:Android HorizontalScrollView左右滑动效果Android ScrollView滑动实现仿QQ空间标题栏渐变Android中实现监听ScrollView滑动事件


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android scrollview如何监听滑动状态

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android scrollview如何监听滑动状态

ScrollView 视图的滚动过程,其实是在不断修改原点坐标。当手指触摸后,ScrollView会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那么ScrollView发送tracking events到被点击
2022-06-06

Android开发之ScrollView的滑动监听

我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void onScrollChanged(int l, int t, int o
2022-06-06

Android中实现监听ScrollView滑动事件

时候我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个 代码如下: protected void onScrollChanged(int x, int
2022-06-06

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

前言 众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当然在API 23中有setOnScrollChangeListe
2022-06-06

Android中如何监听网络状态

这期内容当中小编将会给大家带来有关Android中如何监听网络状态,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一.加入网络权限获取网络信息需要在AndroidManifest.xml文件中加入相应的权限
2023-05-31

Android 项目中如何监听网络状态

这篇文章给大家介绍Android 项目中如何监听网络状态,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android 监听网络状态第一: 开启服务。第二:发送广播的形式。建议采用方法二。源代码如下:广播:/**
2023-05-31

jQuery如何监听用户活动状态改变事件?

jQuery监听用户活动状态jQuery提供了.on()、.bind()和.delegate()方法来监听用户活动状态改变事件。回调函数接收一个activity属性,其值可以是active(活动)、idle(非活动)或inactive(不活跃)。默认超时时间为:活动3分钟,非活动1分钟,不活跃2分钟。可使用$.activity属性自定义超时。启用/禁用活动状态检测:$.activity.enabled=true/false。示例:使用.on()方法监听事件,并根据活动状态打印日志。
jQuery如何监听用户活动状态改变事件?
2024-04-02

vue状态过度如何进行监听

这篇“vue状态过度如何进行监听”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue状态过度如何进行监听”文章吧。vue状态
2023-07-04

jQuery如何监听电池状态改变事件?

jQuery监听电池状态改变事件原理:jQuery无法直接监听电池事件,需要使用原生JavaScriptAPI或第三方插件。方法:原生JavaScriptAPI:window.addEventListener("batterystatus",function(event){...})第三方插件:Cordova:cordova.plugins.batteryStatus.onChange(function(info){...})BatteryAPI:navigator.getBattery().then(f
jQuery如何监听电池状态改变事件?
2024-04-02

jQuery如何监听网络状态改变事件?

jQuery监听网络状态改变事件jQuery提供了一种简单的方法来监听网络状态改变事件,以便在网络连接发生变化时执行操作。步骤:创建jQuery对象绑定网络状态事件处理程序创建事件处理程序函数在事件处理程序中执行操作注意事项:事件处理程序在页面加载后触发。事件在浏览器级触发,而不是会话级触发。浏览器可能缓存事件,因此在进行关键操作前,请使用navigator.onLine属性验证当前状态。
jQuery如何监听网络状态改变事件?
2024-04-02

jQuery如何监听复选框状态改变事件?

如何使用jQuery监听复选框状态改变事件?jQuery提供了一种便捷的方式来监听复选框状态改变事件,当用户勾选或取消勾选复选框时触发。语法为:$(selector).on("change",function(){});回调函数接收一个事件对象,其中包含关于触发事件的详细信息,如:target:触发事件的元素type:事件类型checked:复选框的新状态(true/false)示例:$("#myCheckbox").on("change",function(){if(this.checked){//复选
jQuery如何监听复选框状态改变事件?
2024-04-02

jQuery如何监听AJAX请求状态改变事件?

jQuery监听AJAX请求状态改变事件概述jQuery提供了多种方法监听AJAX请求的状态改变事件,包括:ajaxSuccess和ajaxError:全局事件处理程序,分别用于处理成功和失败的请求。jqXHR对象事件监听:对请求返回的jqXHR对象监听success、error和complete事件。Deferred对象:$.ajax()返回的Deferred对象,提供done、fail和always方法监听状态变更。Promise对象(jQuery3.0+):与Deferred对象类似,提供then、
jQuery如何监听AJAX请求状态改变事件?
2024-04-02

jQuery如何监听浏览器离线状态事件?

使用jQuery监听浏览器离线状态事件,当浏览器失去网络连接时触发。通过注册"offline"事件处理程序,您可以执行自定义操作,如显示警告、禁用依赖网络的操作或保存数据以便稍后重新发送。同时处理"online"事件可确保在重新连接时采取适当措施。最佳实践包括优雅降级、用户反馈、数据持久性和可靠的网络库的使用。
jQuery如何监听浏览器离线状态事件?
2024-04-07

jQuery如何监听浏览器在线状态事件?

使用jQuery监听浏览器在线状态事件,通过online和offline事件在浏览器在线或离线时执行特定操作。监听方法包括事件绑定和代理事件。事件对象不包含特有信息,但可使用window.navigator.onLine检查连接状态。本文提供代码示例和注意事项,并介绍了其他监听方法,如HTML5API和window.navigator.onLine。
jQuery如何监听浏览器在线状态事件?
2024-04-08

jQuery如何监听单选框状态改变事件?

jQuery监听单选框状态改变事件jQuery提供".change()"方法监听单选框状态改变事件。当单选框被选中或取消选中时,此方法将被触发。该方法的语法为:$("selector").change(function(){/*codetoexecutewhenstatechanged*/});其中,"selector"是单选框的jQuery选择器,"function()"是状态改变时执行的回调函数。举例:$("input[name="gender"]").change(function(){consol
jQuery如何监听单选框状态改变事件?
2024-04-02

微信小程序中如何监听网络状态变化

这篇“微信小程序中如何监听网络状态变化”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“微信小程序中如何监听网络状态变化”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下
2023-06-26

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录