热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android中实现监听ScrollView滑动事件

这篇文章主要介绍了Android中实现监听ScrollView滑动事件,本文用重写ScrollView类的方法实现了一些扩展功能,需要的朋友可以参考下

时候我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部。可惜的是SDK并没有相应的方法,不过倒是提供了一个

代码如下:

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

方法,显然这个方法是不能被外界调用的,因此就需要把它暴露出去,方便使用。解决方式就是写一个接口,
代码如下:

package com.example.demo1; 
 
public interface ScrollViewListener { 
 
    void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); 
 

 然后重写ScrollView类,给它提供上面写的回调接口。

代码如下:

package com.example.demo1; 
 
import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ScrollView; 
 
public class ObservableScrollView extends ScrollView { 
 
    private ScrollViewListener scrollViewListener = null; 
 
    public ObservableScrollView(Context context) { 
        super(context); 
    } 
 
    public ObservableScrollView(Context context, AttributeSet attrs, 
            int defStyle) { 
        super(context, attrs, defStyle); 
    } 
 
    public ObservableScrollView(Context context, AttributeSet attrs) { 
        super(context, attrs); 
    } 
 
    public void setScrollViewListener(ScrollViewListener scrollViewListener) { 
        this.scrollViewListener = scrollViewListener; 
    } 
 
    @Override 
    protected void onScrollChanged(int x, int y, int oldx, int oldy) { 
        super.onScrollChanged(x, y, oldx, oldy); 
        if (scrollViewListener != null) { 
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); 
        } 
    } 
 

注意在xml布局的时候,不要写错了包。

代码如下:

    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_ 
    android:layout_ 
    android:orientation="horizontal" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:cOntext=".MainActivity" > 
 
            android:id="@+id/view1" 
        android:layout_ 
        android:layout_ > 
 
                    android:layout_ 
            android:layout_ 
            android:orientation="vertical" > 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试1" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试2" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试3" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试4" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试5" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试6" /> 
       
 
     
 
            android:id="@+id/view2" 
        android:layout_ 
        android:layout_ > 
 
                    android:layout_ 
            android:layout_ 
            android:orientation="vertical" > 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试1" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试2" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试3" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试4" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试5" /> 
 
                            android:layout_ 
                android:layout_ 
                android:text="试试6" /> 
         
     
 
 
 

  最后activity代码如下,
代码如下:

package com.example.demo1; 
 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
 
public class MainActivity extends Activity implements ScrollViewListener { 
 
    private ObservableScrollView scrollView1 = null; 
    private ObservableScrollView scrollView2 = null; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
 
        scrollView1 = (ObservableScrollView) findViewById(R.id.view1); 
        scrollView1.setScrollViewListener(this); 
        scrollView2 = (ObservableScrollView) findViewById(R.id.view2); 
        scrollView2.setScrollViewListener(this); 
 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        // Inflate the menu; this adds items to the action bar if it is present. 
        getMenuInflater().inflate(R.menu.main, menu); 
        return true; 
    } 
 
    @Override 
    public void onScrollChanged(ObservableScrollView scrollView, int x, int y, 
            int oldx, int oldy) { 
        if (scrollView == scrollView1) { 
            scrollView2.scrollTo(x, y); 
        } else if (scrollView == scrollView2) { 
            scrollView1.scrollTo(x, y); 
        } 
    } 
 



推荐阅读
  • 本文详细介绍了如何在Android应用中使用GridView组件以网格形式展示数据(如文本和图像)。通过行列布局,实现类似矩阵的数据展示效果。 ... [详细]
  • Servlet过滤器入门:实现与配置
    本文介绍如何在Java Web应用中实现和配置Servlet过滤器,通过实现`javax.servlet.Filter`接口来创建过滤器,并详细说明其在web.xml文件中的配置方法。 ... [详细]
  • 在使用Maven进行项目构建时,由于依赖库的下载速度慢常常让人感到沮丧,这直接影响了开发效率和学习热情。幸运的是,阿里云提供了一个快速的国内镜像服务,能够显著提升Maven项目的构建速度。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 本文介绍了如何在WildFly 10中配置MySQL数据源时遇到的服务依赖问题及其解决方案。 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • 唐都温泉花园项目现状分析
    唐都温泉花园项目在总收入接近3.5亿元的情况下,出现了严重的资金管理问题,导致政府支持的经济适用房项目面临停工风险。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 最近同事提了一个需求过来,他觉得项目对于第三方日志记录的太多了,只想记录一些业务相关的日志减少对于框架日志的显示。具体要求就是对于框架日志只显示warn等级以上的,而业务日志显示info等级以上 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • 详细指南:使用IntelliJ IDEA构建多模块Maven项目
    本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ... [详细]
author-avatar
风让我离开
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有