滑动到底部或顶部响应的ScrollView实现

本文主要介绍实现ScrollView滑动到底部或顶部响应的两种方式

关于使用可见:滚动到底部或顶部响应的ScrollView使用

示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚

两种实现方式的主要不同点在于判断滑动位置的地方,第一种方式在onScrollChanged函数中判断, 第二种在OnTouchListener的onTouch中判断。其他如是否滚动到边缘的判断、响应事件接口OnBorderListener、对外暴露的接口都一样。

第一种方式代码可见onScrollChanged BorderScrollView
第二种方式代码可见OnTouchListener BorderScrollView

1、判断是否已经滚动到顶部或底部,代码如下:

Java


1

2

3

4

5

6

7

8

9

10

11


private void doOnBorderListener() {

if (contentView != null && contentView.getMeasuredHeight() <= getScrollY() + getHeight()) {

if (onBorderListener != null) {

onBorderListener.onBottom();

}

} else if (getScrollY() == 0) {

if (onBorderListener != null) {

onBorderListener.onTop();

}

}

}

滚动到顶部判断:getScrollY() == 0
滚动到底部判断


1

2


View contentView = getChildAt(0);

contentView.getMeasuredHeight() <= getScrollY() + getHeight();

其中getChildAt表示得到ScrollView的child View,因为ScrollView只允许一个child view,所以contentView.getMeasuredHeight()表示得到子View的高度, getScrollY()表示得到y轴的滚动距离,getHeight()为scrollView的高度。当getScrollY()达到最大时加上scrollView的高度就的就等于它内容的高度了啊~

2、定义到达顶部和底部响应事件接口OnBorderListener,包含onTop和onBottom函数

Java


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17


/**

* OnBorderListener, Called when scroll to top or bottom

*

* @author Trinea 2013-5-22

*/

public static interface OnBorderListener {

/**

* Called when scroll to bottom

*/

public void onBottom();

/**

* Called when scroll to top

*/

public void onTop();

}

这个接口允许用户自定义到达底部和顶部的响应事件

第一种方式: 在onScrollChanged函数中判断,主要代码如下:

Java


1

2

3

4

5


@Override

protected void onScrollChanged(int x, int y, int oldx, int oldy) {

super.onScrollChanged(x, y, oldx, oldy);

doOnBorderListener();

}

在ScrollView的onScrollChanged函数中判断是否到达顶部和底部,并进行相应事件调用,onScrollChanged函数在ScrollView中内容开始滚动时出发被调用。

第二种方式: 在OnTouchListener的onTouch中判断,主要代码如下:

Java


1

2

3

4

5

6

7

8

9

10

11

12

13


this.onBorderTouchListener = new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_UP:

doOnBorderListener();

break;

}

return false;

}

};

表示在touch结束后,手指拿起时执行doOnBorderListener,进行判断和响应。

两种方式的比较:
第一种方式精确度高,但doOnBorderListener可能执行多次,因为ScrollView滑动中,onScrollChanged总是在不停被调用,需要用户自己做并发控制,也可以参考DropDownListView的写法让用户在自定义Listener执行结束后手动调用onBottomComplete函数。

第二种方式不会造成doOnBorderListener多次执行,但却可能一次都没有调用。比如你快速滑动,还未到达底部手指已经松开,由于惯性滚动到底部,可能并不会执行doOnBorderListener。因为onTouch的ACTION_UP事件在手指松开已经接收到这时候却还没有到达底部。

两种方式各有优劣,大家可酌情选择。我要求准确响应,所以选择了第一种,自己再做下控制确保不会多次执行。

时间: 2024-09-08 10:51:59

滑动到底部或顶部响应的ScrollView实现的相关文章

滚动到底部或顶部响应的ScrollView使用

listView示例很多,对于ScrollView却寥寥无几,下面介绍使用自定义的ScrollView来完成该功能的实例. 示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚 示例代码地址见BorderScrollViewDemo,效果图如下: 1.引入公共库 引入TrineaAndroidCommon@Github(欢迎star和fork^_^)作为你项目的library(如何拉取代码及添加公共库),或是自己抽取其中的BorderSc

Android设置ScrollView滚动到底部和顶部

转载请备注原文地址: http://www.niwoxuexi.com/blog/android/article/221.html 我们在开发的过程中,经常会遇到ScrollView滚动到底部和顶部的情况,下面是一种简单的设置方法 1,设置ScrollView滚动到顶部 //设置ScrollView滚动到顶部 scrollView.fullScroll(ScrollView.FOCUS_UP); 2,设置ScrollView滚动到底部 //设置ScrollView滚动到顶部 scrollView

Android开发之Activity的中部或底部回到顶部

我们浏览淘宝商品详情的时候会遇到回到顶部这个功能,下面就说说这个功能的简单实现 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ScrollView android:id="

用jQuery实现的智能隐藏、滑动效果的返回顶部代码

 这篇文章主要介绍了用jQuery实现的智能隐藏.带滑动效果的返回顶部代码,非常实用,需要的朋友可以参考下     在线DEMO:传送门   HTML代码(放在页面任意位置,并用CSS美化):    代码如下:<p id="back-to-top"><a href="#top"><span></span>回到顶部</a></p>   JS代码:    代码如下: <script type=

Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多

很想给大家分享这个开源项目,但是由于工作的关系,没有抽出空,但还是趁着工作间隙写下了这篇博客. 简介 LRecyclerView是支持addHeaderView. addFooterView.下拉刷新.分页加载数据的RecyclerView. 它对 RecyclerView 控件进行了拓展,给RecyclerView增加HeaderView.FooterView,并且不需要对你的Adapter做任何修改. 主要功能 下拉刷新.滑动到底部自动加载下页数据: 可以方便添加Header和Footer:

tabhost-TabHost显示在底部和顶部问题

问题描述 TabHost显示在底部和顶部问题 xml里面代码一样 TabHost继承activity会显示在顶部 但是继承AppCompatActivity却显示在底部 <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_pare

js判断滚动条是否已到页面最底部或顶部实例_javascript技巧

本文实例讲述了js判断滚动条是否已到页面最底部或顶部的方法.分享给大家供大家参考.具体分析如下: 我们经常会看到很多的网站一个返回顶部效果就是当我们滚动条到指定位置时返回顶部出来了,否则就自动隐藏了,下面就来给大家介绍这种效果实现原理与方法. 当可视区域小于页面的实际高度时,判定为出现滚动条,即: 复制代码 代码如下: if (document.documentElement.clientHeight < document.documentElement.offsetHeight) scroll

Android监听WebView滑动到底部

MainActivity如下: package cn.testwebview; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import cn.testwebvie

android scrollView判断停止(滑动到底部)并加载下一页

转自:http://blog.csdn.net/walker02/article/details/7331991  在网上看到一些网页在实现分页加载的时候,能够自动判断是否到达底部,然后自动加载下一页的内容,开始用的是ListView实现的,但是这个效果并不是很好,因为图片比较多出现了有些卡卡的现象,用了另外一种方式去实现了主要是为了对比一下速度的问题,找了很多最后发现可以使用ScrollView,查了很多ScrollView的文档但是没有多少能够使用到的的东西,可能也是水平有限吧,没有仔细的深