Android: ScrollView监听滑动到顶端和底端

在项目中需要监听ScrollView滑动到顶端和底端的时候以实现自己的ScrollView,那么怎样去监听呢?今天查看了一下ScrollView的源码,找到了一种方法。先看一下源码中的overScrollBy()方法:

 1 protected boolean overScrollBy(int deltaX, int deltaY,
 2             int scrollX, int scrollY,
 3             int scrollRangeX, int scrollRangeY,
 4             int maxOverScrollX, int maxOverScrollY,
 5             boolean isTouchEvent) {
 6         final int overScrollMode = mOverScrollMode;
 7         final boolean canScrollHorizontal =
 8                 computeHorizontalScrollRange() > computeHorizontalScrollExtent();
 9         final boolean canScrollVertical =
10                 computeVerticalScrollRange() > computeVerticalScrollExtent();
11         final boolean overScrollHorizontal = overScrollMode == OVER_SCROLL_ALWAYS ||
12                 (overScrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollHorizontal);
13         final boolean overScrollVertical = overScrollMode == OVER_SCROLL_ALWAYS ||
14                 (overScrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && canScrollVertical);
15         int newScrollX = scrollX + deltaX;
16         if (!overScrollHorizontal) {
17             maxOverScrollX = 0;
18         }
19         int newScrollY = scrollY + deltaY;
20         if (!overScrollVertical) {
21             maxOverScrollY = 0;
22         }
23         // Clamp values if at the limits and record
24         final int left = -maxOverScrollX;
25         final int right = maxOverScrollX + scrollRangeX;
26         final int top = -maxOverScrollY;
27         final int bottom = maxOverScrollY + scrollRangeY;
28         boolean clampedX = false;
29         if (newScrollX > right) {
30             newScrollX = right;
31             clampedX = true;
32         } else if (newScrollX < left) {
33             newScrollX = left;
34             clampedX = true;
35         }
36         boolean clampedY = false;
37         if (newScrollY > bottom) {
38             newScrollY = bottom;
39             clampedY = true;
40         } else if (newScrollY < top) {
41             newScrollY = top;
42             clampedY = true;
43         }
44         onOverScrolled(newScrollX, newScrollY, clampedX, clampedY);
45         return clampedX || clampedY;
46     }

此方法有9个参数,参数太多有点让人模糊。这里我们不管他们是什么意思,直接看36-43行代码,很显然这是一个垂直方向的边界检查,而这也正是我们想要的。因此我们可以重写此方法,在此方法中实现监听,代码如下:

 1  @Override
 2     protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
 3
 4         int newScrollY = scrollY + deltaY;
 5         final int bottom = maxOverScrollY + scrollRangeY;
 6         final int top = -maxOverScrollY;
 7         if (newScrollY > bottom) {
 8             System.out.println("滑动到底端");
 9         }
10         else if (newScrollY < top) {
11             System.out.println("滑动到顶端");
12         }
13         return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
14     }

是不是很简单呢?

Android: ScrollView监听滑动到顶端和底端

时间: 2024-08-06 14:18:19

Android: ScrollView监听滑动到顶端和底端的相关文章

ScrollView监听滑动到顶部和底部的方法

不需要监听滑动位置,只需要重写ScrollView的onOverScrolled和stopNestedScroll方法就可以了 public class ReadScrollView extends ScrollView{ private int mScrollY = 0; private boolean mClampedY = false; public ReadScrollView(Context context) { super(context); } public ReadScrollV

vue监听滑动事件,隐藏移动端键盘或者input失去焦点

在页面加载的地方mounted或者created写监听事件,注意使用touchmove事件 window.addEventListener("touchmove",this.myTouchMove) // 监听滑动事件 // 滑动关闭键盘 myTouchMove: function (evt) { if(document.hasFocus){ const inputId = document.getElementById('myBox') // 获取ID inputId.blur()

Android第六期 - ViewPage与菜单栏本地页面监听滑动效果

首先是JiaoyuzixunActivity.java代码部分: package com.gaoxiaotong.ctone.jiaoyuzixun; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONO

Android:监听ListView

本文目录 监听ListView点击事件 监听ListView滚动事件 监听ListView点击事件 使用监听器OnItemClickListener package com.example.testsend; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView.OnIte

Android怎样监听蓝牙耳机的按键事件

写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的使用 蓝牙耳机的使用说明书中都会有相关的具体使用说明,这里拣重点说明一下.除了电源开关,耳机上一般有三个键.例如以下所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/40

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

[转]Android 如何监听返回键,弹出一个退出对话框

本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. 注:如下代码当时是从网上copy过来的,现在忘了它出自哪个原作者了,在此说声抱歉. 源码如下: [html] view plaincopyprint? public class BackKeyTest extends Activi

[Android Pro] 监听内容提供者ContentProvider的数据变化

转载自:http://blog.csdn.net/woshixuye/article/details/8281385 一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改的通知并处理相应操作. 二.示例代码 A应用 /** * 对内容提供者进行操作 * * @author XY * */ public class MainActivity exten

大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出

原文:大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出 这个操作在原生android里是很容易实现的,在xamarin里也不难,在activity里有方法OnKeyDown,我们只需要重写一下就可以了,然后通过webView重新加载到要返回的页面即可,当然操作有些死板,但还是有着不错的效果! 实现的原理就是在activity里设置一个时间,单击后把这个时间赋值并与当前时间进行比较,如果在2秒内,就认为是双击操作,当然这个时间间隔你可以自己设置,在认为是双