Android:获取WebView的滚动位置

2023-11-25

我是安卓新手。

我只想知道用户在页面上滚动到的位置。当网页上的某个点出现在屏幕底部时,我想触发一个事件。但这段代码会引发异常。我知道WebView继承了getScrollY()从视图。我没有正确实施吗?

提前致谢。

public class Scroll extends Activity {

    public WebView webview;
    public float yPos;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webview = new WebView(this);
        setContentView(webview);
        webview.loadUrl("file:///android_asset/Scroll.html");
    }


    public boolean onTouchEvent(final MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_MOVE) {
            yPos = webview.getScrollY();
            Log.v("Scroll", "yPos = " + yPos); 
        }
        return false;
    }
}

WebView 有一个方法来获取其内容高度,我在解决方案中使用了该方法:

webView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
    @Override
    public void onScrollChange(View view, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
        WebView webView = (WebView) view;
        float contentHeight = webView.getContentHeight() * webView.getScaleY();
        float total = contentHeight * getResources().getDisplayMetrics().density - view.getHeight();
        // on some devices just 1dp was missing to the bottom when scroll stopped, so we subtract it to reach 1
        float percent = Math.min(scrollY / (total - getResources().getDisplayMetrics().density), 1);
        Log.d("SCROLL", "Percentage: " + percent);
        if (scrollY >= total - 1) { 
                        Log.d("SCROLL", "Reached bottom");
        }
    }
}

密切注意,提防,小心:

  • 必须考虑 WebView 比例才能获得总滚动高度
  • 显示密度必须乘以内容高度才能与scrollY进行比较
  • 在我的 Android 8 Nexus 5X 上,scrollY 从未达到高度,但在结束前停止了 1dp(解决方法包含在代码中)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:获取WebView的滚动位置 的相关文章

  • Android 应用程序在后台时如何从 firebase-message 获取数据

    我正在使用 firebase console 发送 firebase 消息 这些消息应包含如下所示的附加数据 目的是在我的应用程序的 web 视图中打开特定的 URL 我设置了清单和 firebase 类来获取消息 在我的 firebase
  • 使用街景图像

    我想获取街景图片 注明纬度和经度 并显示在对话框中 这可能吗 我在这里看到了一些示例 但没有找到一个向我展示如何在对话框中显示图像的示例 抱歉 如果网站中已经存在这个问题 但我在搜索时没有找到 是的你可以 作为 URL 根 你可以使用这个h
  • Android 的 Firestore 超时

    我目前正在构建一个应用程序 将用户的博客文章保存在Firestore服务器 一切正常 但我发现该帖子在不稳定的互联网连接下无法上传 我尝试设置一个超时到Firestore实例 但 Firestore 库似乎没有超时选项 问题是 由于没有超时
  • Android Studio 如何检查哪个Imageview被点击并为其分配一个Int值?

    活动一 我有 12 个图像视图 用户单击其中任意一个 如果他们单击 ImageView 1 我们为其分配一个 int 值 image id 1 活动二 使用 If else 语句检查他们单击了哪个图像 Intent result inten
  • 如何使用 JavaScript 提高音频加载速度?

    我已经创建了播放代码 mp3使用 JavaScript 文件 但该文件在 Android 上播放需要很长时间 我想在点击文本图像后快速播放声音 如何提高 Android 的加载速度 我的 JavaScript 代码 if window au
  • 使用意图过滤器从 URL 打开 Android 应用程序不起作用

    我有一个 Android 应用程序 人们用它来替代网站 因此 当用户遇到网站的 URL 时 我想为他们提供在我的应用程序中而不是在浏览器中 打开 URL 的选项 换句话说 我希望出现弹出窗口 让他们在我的应用程序和浏览器 可能还有其他应用程
  • 在Android中,哪种布局更快 1. LinearLayout内的FrameLayout还是2. 一大RelativeLayout?

    我正在考虑视图的两种不同布局安排 这将是 RecyclerView 中的一行 它们是不同的 但它们都可以工作 或者作为 一个容器垂直 LinearLayout 包含多行 FrameLayout 例如LinearLayout gt Frame
  • Kotlin Android Studio - Var 在 SDK 29 中被视为 val

    我在 Kotlin 中遇到了一件非常奇怪的事情 我有 var myClipboard getSystemService CLIPBOARD SERVICE as ClipboardManager var myClip ClipData Cl
  • 为什么mapbox-android sdk 无法从build.gradle 解析?

    我试图在这里设置基本教程 但我被 Android Studio 中的错误阻止 https docs mapbox com android maps overview install the maps sdk https docs mapbo
  • 如何判断手机是否有刘海

    如果存在缺口 我需要修改应用程序的工具栏 现在 该凹口隐藏了工具栏中的一些内容 if Build VERSION SDK INT Build VERSION CODES LOLLIPOP Build VERSION SDK INT Buil
  • 在一天中的特定时间设置闹钟

    我正在尝试将闹钟设置在一天中的特定时间 例如 20 15 这是我正在使用的代码 但它不会在 20 15 关闭 Intent intent new Intent AlarmActivity this MyBroadcastReceiver c
  • Android 视图可见性消失

    如果我设置了一个视图可见性 它被夸大了 消失了 它会加快我的 UI 速度吗 它将加快 UI 的实际绘制速度 因为 好吧 您不必再绘制它 但它仍然会膨胀 并且膨胀过程不会更快
  • Android studio 导入模块按钮缺失

    我已经使用 Eclipse 很长时间了 但我想尝试一下 Android Studio 所以我创建了新项目 现在我想向其中添加 SlidingMenu 库 我发现一些教程说要转到项目结构 单击加号按钮并选择导入模块 但是没有导入模块选项 当我
  • Ctrl 单击 Eclipse 中的类显示二进制/jar 而不是源

    使用Eclipse 版本 Helios 服务版本 2 内部版本号 20110218 0911 与Android插件 我有一个 Android 项目 AndroidUtil 它被标记为我的主要 Android 应用程序的 库 项目 当我按住
  • 选择活动时运行时崩溃

    首先我想说我几乎没有 Android 经验 这是我在 Android 中的第一个项目 而且我的老师不太擅长教学 所以我对任何过度的无知表示歉意 在进一步讨论之前先解释一下 我的应用程序的目标本质上是能够记录您在某些活动上花费了多少时间 记录
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • Android BottomNavigationView 与自定义视图作为图标[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试 Android 支持库中的新 BottomNavigationView 对于其中一个菜单项 我希望有一个自定义视图 以便我
  • 在 Android(JB 上)中,如何向自定义丰富通知添加操作?

    我一直在使用 Jelly Bean 中新的丰富通知 当我使用模板设置新通知时 一切都按预期工作Notification BigPictureStyle Notification BigTextStyle or Notification In
  • 如何在android中使用Room Persistence ORM工具实现created_at和updated_at列

    我该如何实施created at and updated at在Android中使用Room Persistence ORM工具的列 可以在创建或更新表中的行时自动更新时间戳 我研究了很多网站 但仍然没有找到任何可以处理的结果middlew
  • 扩展Android应用程序类

    当我正在寻找从远程设备获取错误报告的解决方案时 就像 iOS 中的试飞应用程序一样 我发现了acra适用于 Android 设备here http code google com p acra wiki BasicSetup 在基本设置中

随机推荐

  • 如何使用Python中的套接字响应代理服务器中的“CONNECT”方法请求?

    我目前正在使用 httplib 编写代理服务器 当我尝试连接到 HTTPS 网站 例如 facebook 和 google 时 我的客户端向我发送 CONNECT 请求 如下所示 CONNECT www google co il 443 H
  • PHP 命名空间可以包含变量吗?

    PHP 命名空间可以包含变量吗 如果是这样 如何实现这一点 不可以 您可以在声明命名空间后设置变量 但变量将始终存在于全局范围内 它们永远不会绑定到名称空间 您可以从缺少任何名称解析描述的情况中推断出这一点 常见问题解答 有关命名空间您需要
  • 不使用 NewID() 的 SQL 上的随机数

    您好 我想生成一个唯一的随机数 而不使用以下语句 Convert int CHECKSUM NEWID 100000 AS ITEM 因为当我在 from 上使用连接子句时 它通过使用 NEWID 生成双寄存器 我使用 SQL Server
  • 如何在MySQL中进行级联更新?

    Let s look at this example database 正如我们所看到的 person 取决于城市 person city id 是外键 我不删除行 只是将它们设置为非活动状态 活动 0 将城市设置为非活动状态后 如何自动将
  • 默认导出类的新实例

    下面的代码片段每次导入时都会生成新实例吗 1st implementation class ConnectionManager export default new ConnectionManager 2nd implementation
  • google api javascript 登录用户的电子邮件

    有许多资源和堆栈溢出问题与我将要问的类似但不完全相同 我将在这里重新讨论一些解决方案并进行解释 我有一个已经登录 Google 的用户 我所说的登录是指手动登录并且存在 cookie 我的应用程序未登录 我只需要获取电子邮件地址 我见过 3
  • 哈希集的哈希码和等于[重复]

    这个问题在这里已经有答案了 请澄清我对 Hashset 的疑问 考虑下面的代码 class Person String name Person String n name n public String getName return nam
  • “写入输出时出现问题:字段引用太多:70185;最大值为 65536。您可以尝试使用 --multi-dex 选项。”构建Android项目时

    我遇到了这个错误 但没有找到错误消息 所以我想我应该分享我想出的解决方案 以防止其他面临问题的人重复我的工作 当编写一个新的 Android 库 apklib 以在 大型 应用程序中使用时 当我将新项目添加为依赖项时 我在 dexing 过
  • jquery 设置焦点于动态内容?

    在 jquery 中我附加了一个 li 元素到无序列表 我如何专注于新创建的 li li 如果我执行以下操作 ul append li li li
  • 使用 ios 7 视差效果移动图像

    我刚刚看到 Facebook 的新纸质应用程序 它可以根据视差效果使图像移动 因此 它将图像缩放到全屏 当您倾斜屏幕时 它会将图像滚动到您倾斜的一侧 我已经能够像苹果那样添加视差效果 但不能像 Facebook 那样添加视差效果 有谁知道他
  • 处理 Enum 类型时 CStr() 与 .ToString 的比较

    我 显然是错误的 假设Cstr something 相当于something ToString 我想将枚举类型作为字符串来获取 这似乎取决于我使用的转换方法 我要么获取该类型的索引enum或名称 Public Enum vehicleTyp
  • 如何在 findAll() 中获取数组结果 - Doctrine?

    我需要使用以下方法获取数据库中的所有记录作为数组findAll 在教义中 我的查询是这样的 result this gt getDoctrine gt getRepository CoreBundle Categories gt findA
  • 任务执行失败:':app:preDexDebug'

    我遇到了那个著名的 app preDexDebug 错误 首先 清理项目或重建项目可以正常工作 不会出现错误 在默认设置下 我将项目字节码版本设置为 1 7 并且在项目结构中的 SDK 位置下 JDK 位置似乎也是正确的 经过一段时间的研究
  • 由于信号导致命令失败:归档时分段错误:11

    我尝试存档我的应 用程序并收到此错误 由于信号导致命令失败 分段错误 11 当我构建它时 一切都很顺利 在真实设备上也是如此 归档时会发生这种情况 有什么想法如何解决吗 这是错误的一部分 0 swift 0x000000010f79f3ad
  • 如何在 Angular 中嵌套 routerLink

    我有一个 Angular 7 项目 我有路由器链接 a 标签 并且我已经嵌套了 a 两者都有的标签routerLink财产 我面临的问题是 内在 a 路线不起作用 a Comp1 a Navigate to comp2 Nested a a
  • Swift/iOS:如何在具有 AnyObject/Any 或指针的函数中使用 inout 参数

    我正在尝试编写一个函数 该函数接受变量指针和描述符 键并为变量设置新值 理想情况下 指针应该是对象或基元 但我也可以使用单独的函数 或附加参数 在我的代码中 我也使用该键从数据库中检索新值 但在下面的示例中 我使用虚拟值对其进行了简化 以便
  • 使用弱引用有什么好处?

    我的应用程序中存在一些内存泄漏 它们都源于一个特定的视图集群 我花了很多时间对其进行调整并尝试尽可能减少上下文传递 这让我相信集群中使用的位图是问题所在 所以我想对视图使用的位图的所有引用使用 Wea kReferences 我从未使用过
  • Android Studio:生成主 dex 列表时出错

    我试图从我的项目中完全删除 firebase 依赖项 但我已经设法完全搞砸了我的 gradle 我需要帮助才能使其再次工作 我需要有谷歌播放服务依赖项 因为我正在使用谷歌地图和地理围栏 这是我每次尝试重建项目时遇到的错误 java lang
  • 在 XSLT 中实现键值概念

    我正在研究 XSLT 我需要实现如下内容 我的源 XML 示例如下所示
  • Android:获取WebView的滚动位置

    我是安卓新手 我只想知道用户在页面上滚动到的位置 当网页上的某个点出现在屏幕底部时 我想触发一个事件 但这段代码会引发异常 我知道WebView继承了getScrollY 从视图 我没有正确实施吗 提前致谢 public class Scr