首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让ScrollView在滚动到末尾时也能使用触摸事件?

要让ScrollView在滚动到末尾时也能使用触摸事件,可以通过监听ScrollView的滚动事件来实现。

首先,需要获取ScrollView的滚动位置和内容高度。可以使用ScrollView的getScrollY()方法获取当前滚动的垂直位置,使用getChildAt(0).getHeight()方法获取ScrollView的内容高度。

然后,在ScrollView的滚动事件监听器中判断滚动位置是否达到了内容的底部。如果滚动位置加上ScrollView的高度等于内容高度,即表示滚动到了末尾。

接下来,根据滚动到末尾的条件来处理触摸事件。可以通过重写ScrollView的onTouchEvent()方法,在滚动到末尾时将触摸事件传递给ScrollView的子View处理,否则继续由ScrollView处理。

以下是一个示例代码:

代码语言:txt
复制
ScrollView scrollView = findViewById(R.id.scrollView);
View contentView = scrollView.getChildAt(0);

scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
    @Override
    public void onScrollChanged() {
        int scrollY = scrollView.getScrollY();
        int contentHeight = contentView.getHeight();
        int scrollViewHeight = scrollView.getHeight();

        if (scrollY + scrollViewHeight == contentHeight) {
            // 滚动到末尾,将触摸事件传递给子View处理
            contentView.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
        }
    }
});

scrollView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int scrollY = scrollView.getScrollY();
        int contentHeight = contentView.getHeight();
        int scrollViewHeight = scrollView.getHeight();

        if (scrollY + scrollViewHeight == contentHeight) {
            // 滚动到末尾,将触摸事件传递给子View处理
            contentView.dispatchTouchEvent(event);
            return true;
        }

        return false;
    }
});

这样,当ScrollView滚动到末尾时,触摸事件就会传递给ScrollView的子View处理,实现了在滚动到末尾时也能使用触摸事件的效果。

请注意,以上代码仅为示例,具体实现可能需要根据具体的业务需求进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【IOS开发基础系列】UIScrollView专题

1 UIScrollView原理        滚动过程当中,其实是修改原点坐标。当手指触摸后,scroll view会暂时拦截触摸事件,使用一个计时器。...假如定时器行动,没有任何的大的位置改变,滚动视图就发送一个跟踪事件触摸的子视图。如果在定时器消失前,用户拖动他们的手指足够的远,滚动视图取消子视图的任何跟踪事件,滚动它自己。...我们设置的这个cancancelContentTouches属性为NO,只是UIScrollView不能发送cancel事件给子视图。...而前面所说的,中断touch-down事件,和取消touch事件是俩码事,所以当快速子视图上移动的时候,当然可以滚动。...当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器。

56330

UIScrollView

:(UIScrollView *)scrollView; //48. scrollView减速停止了时候执行,手触摸时候执行 - (void)scrollViewDidEndDecelerating...滚动动画停止执行代码改变触发,也就是setContentOffset改变的时候 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *...) @property(nonatomic) CGSize contentSize; 这个属性用来表示UIScrollView内容的尺寸,滚动范围(多远) @property(nonatomic...scrollEnabled 属性 = YES; userInteractionEnabled 属性 = YES; 监听scrollView各种行为的3大步骤(比如控制器监听scrollView的行为...开头 如何监听控件的行为 通过addTarget: 只有继承自UIControl的控件,才有这个功能 UIControlEventTouchUpInside : 点击事件(UIButton) UIControlEventValueChanged

1.8K60
  • Android开发笔记(一百六十四)仿京东首页的下拉刷新

    虽然Android提供了专门的下拉刷新布局SwipeRefreshLayout,但它并没有页面随手势下的效果。...所以此处得捕捉页面滚动到顶部的事件,相对应的则是页面滚动到底部的事件。鉴于App首页基本采用滚动视图ScrollView实现页面滚动功能,故而该问题就变成了如何监听该视图滚到顶部或者滚到底部。...因为页面到顶继续下拉,ScrollView要怎么处理?...一方面是整个页面已经拉到顶了,造成ScrollView已经无可再拉;另一方面,用户在京东首页看到的下拉头部,其实并不属于ScrollView管辖,即使ScrollView想拉这个头部兄弟一把,只能有心无力.../底部的事件触摸监听器用于处理下拉过程中的持续位移。

    2.9K40

    iOS-UIScrollerView

    UIScrollerView滚动的位置(其实就是内容左上角与ScrollerView左上角的间距值) CGSize contentSize 这个属性用来表示UIScrollerView内容尺寸,滚动范围(多远...无法滚动的原因 没有设置contentSize scrollEnabled = NO 没有收到触摸事件:ueserInteractionEnabled = NO UIScrollerView代理方法...ScrollerView滑动的代理回调 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ NSLog(@"即将开始滑动内容..."点击状态栏是否可以回到顶部"); return YES; } //scrollViewShouldScrollToTop设置为YES,滚动视图完成滚动到内容顶部发送此消息 - (void)...scrollViewDidScrollToTop:(UIScrollView *)scrollView{ NSLog(@"滚动视图完成滚动到内容顶部发送此消息"); } UIScrollerView

    17510

    IOS开发系列——UIView专题之五:常用开发技巧篇

    自定义子View中使用layoutSubviews应注意,[superlayoutSubviews];最好放在方法默认最后执行,不然IOS7下面可能引起挂机。...的事件队列,UIApplication会从事件队列中取出触摸事件并传递给key window(当前接收用户事件的窗口)处理,window对象首先会使用hitTest:withEvent:方法寻找此次Touch...UITouch对象触摸操作的过程中不断变化,所以使用UITouch对象,不能直接retain,而需要使用其他手段存储UITouch的内部信息。...UITouch对象有一个view属性,表示此触摸操作初始发生所在的视图,即上面检测到的hit-test view,此属性UITouch的生命周期不再改变,即使触摸操作后续移动到其他视图之上。...the responder chain 在此例子中button,scrollview同为topView的子视图,但scrollview覆盖button之上,这样在在button上的触摸操作返回的hit-test

    1.1K20

    仿腾讯课堂固定滚动列表ReactNative组件

    跑起来运行后发现的一个严重的问题是,如果Tab导航控件的内容区域存在ScrollView或者ListView,无法滚动,只有最外层可以滚动,也就是手势滚动被拦截了?...发现第一种方法解决如何寻找子控件并判断滚动状态上没有方法(可能是我没发现)以及性能上的考量,那就采用第二种方法。 分析 为了解决上面的问题,我们需要了解几个关键点。...剩下最后一个如何通知内层容器滚动呢?先卖个关子,解决这个问题之前,我们先来了解下Android中的View事件如何传递的。 正所谓知己知彼,百战不殆,看看Android触摸事件类型有哪些?...根据手触摸屏幕的y坐标差来判断手势往上还是往下。手指滑动时会产生一系列触摸事件,这里有两种情况:说明下屏幕的左上角是坐标原点,沿着右边是x轴,左边则是y轴。.... -> Move 记录Down触摸事件的Y坐标值作为起始值,Move或者UP的Y坐标值作为末尾值,两者之差大于最小滑动值则说明向上滑,小于最小滑动值则说明向上滑(这里简化了条件,如果是实现OnGestureListener

    4.9K70

    Android开发笔记(四十五)手势事件

    TouchEvent 下面是触摸事件的常用方法: getAction : 获取当前的动作 getX : 获取当前控件内部的相对坐标X getY : 获取当前控件内部的相对坐标Y getRawX...,然后触摸方法onTouch中由GestureDetector接管触摸事件 :  private ScrollTextView tv_rough; private GestureDetector...Activity中重写onTouchEvent方法,该方法中由GestureDetector接管触摸事件。...这样多个控件争相响应同一个手势事件,就会产生滑动冲突,如果没处理好冲突,页面上的某些控件便无法正常使用。避免滑动冲突的处理办法,主要有以下三个: 1、对不同的手势事件,要返回正确的布尔值。...下面示例代码演示了这么一个意图:当用户按下或者滑动,当前控件需要响应手势事件,请上级视图不要拦截手势;当用户松开或取消,当前控件已经处理完毕,允许上级视图拦截手势。

    1.3K30

    Android的FixScrollView自定义控件

    ),现在外部的ScrollView设定一个固定高度(屏幕高度+视频高度一半),接下来解决的难点是要使用原生的父ScrollView根据手势以及父ScrollView滚到底部判断是否把事件分发给子页面中ListView...他滚起来?...接下来要了解几个知识点, ①了解下Android事件分发的机制  ②了解哪些触摸类型事件以及之间的联系 ③如何在ViewGroup中寻找子控件(递归 找一个具体的控件大坑,尤其是再React-Native...) up--手指抬起事件 3如何在ViewGroup中寻找子控件 使用递归+instanceof可以父ScrollView找到一组类型相同的控件,想找某一个tab子页面中某一个ListView,太坑了!...) { //获取view整个屏幕中的坐标如果x==0的话代表这个scrollview是正在显示 int[] location

    1.8K80

    干货 | Flutter控件CustomScrollView原理解析及应用实践

    2.2 触摸事件的监听 下面主要介绍一下主要的4个触摸事件处理: 1)DragDown ? 图6 dragDown触摸事件 如图6所示,这个事件主要是对应用户手指按下跟屏幕接触的时刻。...图8 dragUpdate触摸事件 如图8所示,这个手势代表用户dragStart后屏幕上move的更新值。 4)DragEnd ?...5)Controller:这个类是我们使用CustomScrollView时经常会设置的一个参数,它顾名思义就是一个控制器可以让我们去控制ScrollView,设置参数它去滚动。...算法很清晰,一直往下逐个遍历和布局接下来child,直到某个child的末尾超过了本次布局一开始提前限定的范围。这个范围一般是scrollView可视范围的窗口高度再加上一个cache距离。...当然在数据量很大的情况下,对内存使用这块的设计相对以前Native还是比较简单的。 后续我们会在应用继续深入的基础上,功能上做进一步的丰富以及性能上考虑如何做进一步的优化。

    1.5K30

    Android中文API——ScrollView

    通常用的子元素是垂直方向的LinearLayout,显示最上层的垂直方向可以用户滚动的箭头。...public boolean onInterceptTouchEvent (MotionEvent ev) 实现此方法是为了拦截所有触摸屏幕的运动事件。...如果onTouchEvent()返回true,你不会收到onInterceptTouchEvent()的任何事件并且所有对触摸的处理必须在onTouchEvent()中发生。 3....此函数会引起对onScrollChanged(int, int, int, int)函数的调用并且会视图更新。 当前版本取消了子视图中的滚动。...可能是视图的其他子视图使用的) parentHeightMeasureSpec      当前视图要求的宽度 heightUsed 垂直方向上由父视图使用的空白 (可能是视图的其他子视图使用的)

    4.6K30

    React-native踩坑小记

    listview没有弹性边界,无法实现线上的下拉刷新效果: 因为android本身就没有滚动到边界还能继续滚动的策略。。这里使用一些java补丁代码(列表插件所提供),来实现弹性边界-。- 3....于是我们开始研究android的触摸事件到底是怎么个执行法。 大致是一个先捕获,再冒泡的过程: 最外层组件触发回调,询问是否捕获事件,并阻止事件继续传递。...Touch* 组件有两个事件是这里我们需要用到的:onPressIn和onPressOut 这两个事件会在手指按下和抬起触发; 所以我们需要做的就是在这两个事件中触发锁定和解锁外层scrollview...我们这里使用了setNativeProps方法进行锁定scrollview。 setNativeProps不会触发重绘,直接改变React对象的props值。...虽说有的时候手快了,还是会拦截不到事件-.- 然而当我下载了我司客户端后发现有时会存在这个问题我就坦然了,233333333) 一个简单的阻止外层scrollview滑动的栗子 所使用插件的链接: 当下最好用的列表插件

    4.5K80

    Android--仿淘宝商品详情(继续拖动查看详情)及标题栏渐变

    ;然后监听Scrollview动到底部添加动画效果其滑动到下面的Scrollview,当下面的Scrollview动到顶部的时候再添加一个向上的动画其滑动到上面的Scrollview。...下面我们来看一下代码实现: 1.首先我们重写拦截事件DOWN行为时获取跟踪触摸事件的速率也就是VelocityTracker,设置mEvents=0,可以拖拽;当触发ACTION_POINTER_UP...事件防止多点拖拽。...当触发MOVE事件,我们记录下拖拽的距离并且处理事件冲突。...当手指抬起触发UP事件,通过判断y轴滑动速度以及手指滑动方向利用计时器实现上下View的滚动事件,这里详细介绍一下requestLayout()这个方法 我们可以理解为重新布局了一下view;

    1.3K10

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    解决思路 看了上面三种情况,我们知道他们的共同特点是父View 和子View都想争着响应我们的触摸事件,但遗憾的是我们的触摸事件 同一刻只能被某一个View或者ViewGroup拦截消费,所以就产生了滑动冲突...但是该方法存在缺点,就是当我们上面的view如果滑动到一半的时候,切换到下一个Fragment,切换回来的时候,RecyclerView的第一个item会自动滑动到顶部。...目前我还没有找到相对比较好的解决这个问题的方法,大家知道相关解决方法的话欢迎联系我,可以加我 微信或者留言区评论,谢谢。...,这种实现方式需要自己解决View滑动事件的冲突,同时还有我在上述提高的Fragment中存在的问题 - 使用listView的addHeaderView来实现,或者是通过多种不同的item来实现...关于RecyclerView如何添加headerView可以参考鸿洋大神的这一篇博客 Android 优雅的为RecyclerView添加HeaderView和FooterView - 使用SupportLibrary

    5.7K51

    ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

    和子View都想争着响应我们的触摸事件,但遗憾的是我们的触摸事件 同一刻只能被某一个View或者ViewGroup拦截消费,所以就产生了滑动冲突?...但是该方法存在缺点,就是当我们上面的view如果滑动到一半的时候,切换到下一个Fragment,切换回来的时候,RecyclerView的第一个item会自动滑动到顶部。...目前我还没有找到相对比较好的解决这个问题的方法,大家知道相关解决方法的话欢迎联系我,可以加我 微信或者留言区评论,谢谢。...,如果是的话,根据子View时候需要拦截进行处理 ---- 讨论 对于这种效果,上面是轮播图的,下面是RecyclerView或者ListView的,一般有一下几种实现方式 使用我们上述提高的ScrollView...关于RecyclerView如何添加headerView可以参考鸿洋大神的这一篇博客 Android 优雅的为RecyclerView添加HeaderView和FooterView 使用SupportLibrary

    66810

    CreatorPrimer|触摸事件冒泡

    从一次微信聊天开始 ---- 前两天正在愁公众号写点什么,打开微信看到uikiller用户「悦雨」遇到了一个问题: 地图拖动与子节点触摸事件产生冲突,表现为:子节点上拖动,但地图不动,怎么办?...第三话 结果是OK的,于是将测试场景发给了「悦雨」同学,但ScrollView不是想要的,继续聊这个问题: ? 第四话 不想用ScrollView,还有什么方案呢?触摸事件捕获!继续对话: ?...以cc.ScrollView组件为例,看如何定位组件源码: 使用Chrome浏览器启动游戏预览 打开Chrome DevTools工具 键盘快捷键:ctrl + p 或 cmd + p 输入:ccscrollview..._onTouchEnded, //事件处理函数 this, //事件处理函数的this上下文(使用箭头函数通常被省略)...微信、QQ很容易人在工作时分心,一般在做事的时候会将手机静音或离远一点,公众号上偶尔收有留言,但有时会忘记去公众号上查看,超过24小的留言,看到了想回复也无没办法,很是无奈。

    1.3K30

    Android仿IOS上拉下拉弹性效果的实例代码

    用过iphone的朋友相信都体验过页面上拉下拉有一个弹性的效果,使用起来用户体验很好;Android并没有给我们封装这样一个效果,我们来看下在Android里如何实现这个效果。...思路:其实原理很简单,实现一个自定义的Scrollview方法(来自网上大神),然后布局文件中使用自定义方法Scrollview就可以了。 代码: 自定义View,继承自Scrollview。...的子View, 也是ScrollView的唯一一个子View private View contentView; //手指按下的Y值, 用于移动时计算移动距离 //如果按下不能上拉和下拉, 会在手指移动更新为当前手指的....getRight(), contentView.getBottom()); } //触摸事件中, 处理上拉和下拉的逻辑 @Override public boolean dispatchTouchEvent...ok,功能实现,效果演示,具体需要使用直接拿来用就可以。 以上这篇Android仿IOS上拉下拉弹性效果的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考。

    1.3K30

    iOS开发UIScrollView使用详解 原

    iOS开发UIScrollView使用详解 一、ScrollView常用方法和属性 @property(nonatomic)CGPoint contentOffset; 设置滚动的偏移量 @property...你的滚动视图只能同一一个方向上滚动,但是当你从对角线拖动,是时刻在水平和竖直方向同时滚动的。...BOOL decelerating; 获取视图是否开始减速(用户停止拖动但视图仍在滚动) @property(nonatomic) BOOL delaysContentTouches; 设置视图是否延迟处理触摸事件...- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; 视图动画结束触发的方法,使用set方法设置偏移量后回触发...*)scrollView; 视图快捷滚动回顶端开始动作时调用 疏漏之处 欢迎指正 专注技术,热爱生活,交流技术,做朋友。

    1.6K30

    HorizontalScrollView扩展总结

    ScrollView相信大家都已经比较熟悉了,它是支持垂直滚动的,开发中经常使用到,与垂直滚动相对的就是水平滚动HorizontalScrollView,有时我们进行页面切换的时候会用到HorizontalScrollView...通过查看源码比较发现ScrollView和HorizontalScrollView有好多相同的方法。...,当然还可以用用其它的View (3) HorizontalScroll内部使用到的OverScroller 缺省滑动的时间为DEFAULT_DURATION = 250 ms (4) 可以平滑可以瞬间滑动...smoothScrollingEnabled)方法 设置的mSmoothScrollingEnabled标记只doScrollX(int delta)有使用doScrollX内部如果mSmoothScrollingEnabled...MotionEvent ev) 如果支持手势滑动,如果有设置滚动监听则监听滚动,同时调用父类HorizontalScroll的onTouch; 如果不支持手势滑动,则直接return true直接将touch事件交给子

    80610

    Flutter | 超简单仿微信QQ侧滑菜单组件

    需求分析 老套路,先分析一下需求: 1.首先可以滑出菜单2.菜单滑动到一定距离完全滑出,未达到距离回3.菜单数量、样式随意定制4.菜单点击回调5.菜单展开,点击 item 收回菜单(见QQ) 代码实现...菜单滑动到一定距离完全滑出,未达到距离回 这个效果就需要监听滑动距离和手势了。 如果滑动距离大于所有 menu 宽度的 1/4,那就全都滑出来,如果不到的话,就回滚回去。...,其父级组件肯定可以收到该事件。...•opaque:命中测试,将当前组件当成不透明处理(即使本身是透明的),最终的效果相当于当前Widget的整个区域都是点击区域。...•translucent:当点击组件透明区域,可以对自身边界内及底部可视区域都进行命中测试,这意味着点击顶部组件透明区域,顶部组件和底部组件都可以接收到事件

    2.2K32
    领券