iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android scrollview如何监听滑动状态
  • 609
分享到

Android scrollview如何监听滑动状态

监听scrollviewAndroid 2022-06-06 11:06:46 609人浏览 薄情痞子
摘要

ScrollView 视图的滚动过程,其实是在不断修改原点坐标。当手指触摸后,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滑动事件


--结束END--

本文标题: Android scrollview如何监听滑动状态

本文链接: https://www.lsjlt.com/news/28476.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Android scrollview如何监听滑动状态
    ScrollView 视图的滚动过程,其实是在不断修改原点坐标。当手指触摸后,ScrollView会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那...
    99+
    2022-06-06
    监听 scrollview Android
  • Android开发之ScrollView的滑动监听
    我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void ...
    99+
    2022-06-06
    监听 scrollview android开发 Android
  • Android中实现监听ScrollView滑动事件
    时候我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个 代码如下: protecte...
    99+
    2022-06-06
    事件 scrollview Android
  • Android中ScrollView监听滑动距离案例讲解
    需求:想实现像美团中列表下拉后出现悬浮窗的效果。 思路:首先对ScrollView进行滑动监听,然后在onScrollChanged()方法中获取到滑动的Y值,接着进行相关操作即可。...
    99+
    2022-11-12
  • Android监听ScrollView滑动距离的简单处理
    本文实例为大家分享了Android监听ScrollView滑动距离的具体方法,供大家参考,具体内容如下 使用ScrollView时,有时候我们需要要获取它滑动的距离,Android的...
    99+
    2022-11-13
  • Android中ScrollView实现滑动距离监听器的方法
    前言 众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当...
    99+
    2022-06-06
    监听 方法 scrollview 监听器 Android
  • Android中如何监听网络状态
    这期内容当中小编将会给大家带来有关Android中如何监听网络状态,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一.加入网络权限获取网络信息需要在AndroidManifest.xml文件中加入相应的权限...
    99+
    2023-05-31
    android
  • Android 项目中如何监听网络状态
    这篇文章给大家介绍Android 项目中如何监听网络状态,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android 监听网络状态第一: 开启服务。第二:发送广播的形式。建议采用方法二。源代码如下:广播: Broa...
    99+
    2023-05-31
    android 如何监听 roi
  • vue状态过度如何进行监听
    这篇“vue状态过度如何进行监听”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue状态过度如何进行监听”文章吧。vue状态...
    99+
    2023-07-04
  • 微信小程序中如何监听网络状态变化
    这篇“微信小程序中如何监听网络状态变化”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“微信小程序中如何监听网络状态变化”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下...
    99+
    2023-06-26
  • 小程序开发中如何监听网络状态变化
    这篇文章主要为大家展示了小程序开发中如何监听网络状态变化,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序开发中如何监听网络状态变化”这篇文章吧。监听网络状态变化。CALLBACK返回参数:参数...
    99+
    2023-06-26
  • React在组件中如何监听redux中state状态的改变
    目录在组件中监听redux中state状态的改变解决方式React和redux的状态处理在组件中监听redux中state状态的改变 解决方式 1、在组件中引入store 2、在co...
    99+
    2022-11-13
    React组件 监听state的改变 监听redux中state改变
  • 如何使用vue与jquery实时监听用户输入状态
    这篇文章主要介绍如何使用vue与jquery实时监听用户输入状态,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现效果:input未输入值,按钮禁用jquery操作代码:html&l...
    99+
    2022-10-19
  • vue如何监听滚动事件实现锚点链接平滑滚动
    这篇文章将为大家详细讲解有关vue如何监听滚动事件实现锚点链接平滑滚动,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基于vue监听滚动事件,实现锚点链接平滑滚动近日在做一...
    99+
    2022-10-19
  • 微信小程序如何监听手势滑动切换页面
    这篇文章给大家分享的是有关微信小程序如何监听手势滑动切换页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信小程序 监听手势滑动切换页面实例详解1.对应的xml里写上手势开始、...
    99+
    2022-10-19
  • 如何利用原生JS实现触摸滑动监听事件
    前言 今天写一个小Demo,有个地方涉及到了左滑右滑的逻辑,本来想着用插件来着,但是想到自己好久没用原生JS写滑动的监听了,所以试着用原生JS来实现了一下,毕竟温故而知新嘛,同时做...
    99+
    2022-11-12
  • Oracle DBA如何监听的静态注册与动态注册
    这篇文章主要介绍“Oracle DBA如何监听的静态注册与动态注册”,在日常操作中,相信很多人在Oracle DBA如何监听的静态注册与动态注册问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2022-10-19
  • JavaScript如何动态监听DOM元素高度详解
    背景 考虑这样一种情况,产品同学希望达到以下功能: 在我们的网页中有一个固定区域,这个区域会用于渲染从后端拉取的含有图片等资源的富文本字符串。 他需要在内容不超过一个最大高度的时候完...
    99+
    2022-11-13
  • Vue.js如何通过监听滚动事件实现动态锚点
    这篇文章主要介绍了Vue.js如何通过监听滚动事件实现动态锚点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体效果如下:如果是传统项目,这...
    99+
    2022-10-19
  • 微信小程序如何监听蓝牙适配器状态变化事件
    这篇“微信小程序如何监听蓝牙适配器状态变化事件”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“微信小程序如何监听蓝牙适配器状态变化事件”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作