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

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

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

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

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

  1. package com.example.demo1;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import android.widget.ScrollView;
  5. public class ObservableScrollView extends ScrollView {
  6. private ScrollViewListener scrollViewListener = null;
  7. public ObservableScrollView(Context context) {
  8. super(context);
  9. }
  10. public ObservableScrollView(Context context, AttributeSet attrs,
  11. int defStyle) {
  12. super(context, attrs, defStyle);
  13. }
  14. public ObservableScrollView(Context context, AttributeSet attrs) {
  15. super(context, attrs);
  16. }
  17. public void setScrollViewListener(ScrollViewListener scrollViewListener) {
  18. this.scrollViewListener = scrollViewListener;
  19. }
  20. @Override
  21. protected void onScrollChanged(int x, int y, int oldx, int oldy) {
  22. super.onScrollChanged(x, y, oldx, oldy);
  23. if (scrollViewListener != null) {
  24. scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
  25. }
  26. }
  27. }

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

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. tools:context=".MainActivity" >
  11. <com.example.demo1.ObservableScrollView
  12. android:id="@+id/view1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="match_parent" >
  15. <LinearLayout
  16. android:layout_width="wrap_content"
  17. android:layout_height="match_parent"
  18. android:orientation="vertical" >
  19. <TextView
  20. android:layout_width="100dp"
  21. android:layout_height="100dp"
  22. android:text="试试1" />
  23. <TextView
  24. android:layout_width="100dp"
  25. android:layout_height="100dp"
  26. android:text="试试2" />
  27. <TextView
  28. android:layout_width="100dp"
  29. android:layout_height="100dp"
  30. android:text="试试3" />
  31. <TextView
  32. android:layout_width="100dp"
  33. android:layout_height="100dp"
  34. android:text="试试4" />
  35. <TextView
  36. android:layout_width="100dp"
  37. android:layout_height="100dp"
  38. android:text="试试5" />
  39. <TextView
  40. android:layout_width="100dp"
  41. android:layout_height="100dp"
  42. android:text="试试6" />
  43. </LinearLayout>
  44. </com.example.demo1.ObservableScrollView>
  45. <com.example.demo1.ObservableScrollView
  46. android:id="@+id/view2"
  47. android:layout_width="wrap_content"
  48. android:layout_height="match_parent" >
  49. <LinearLayout
  50. android:layout_width="wrap_content"
  51. android:layout_height="match_parent"
  52. android:orientation="vertical" >
  53. <TextView
  54. android:layout_width="100dp"
  55. android:layout_height="100dp"
  56. android:text="试试1" />
  57. <TextView
  58. android:layout_width="100dp"
  59. android:layout_height="100dp"
  60. android:text="试试2" />
  61. <TextView
  62. android:layout_width="100dp"
  63. android:layout_height="100dp"
  64. android:text="试试3" />
  65. <TextView
  66. android:layout_width="100dp"
  67. android:layout_height="100dp"
  68. android:text="试试4" />
  69. <TextView
  70. android:layout_width="100dp"
  71. android:layout_height="100dp"
  72. android:text="试试5" />
  73. <TextView
  74. android:layout_width="100dp"
  75. android:layout_height="100dp"
  76. android:text="试试6" />
  77. </LinearLayout>
  78. </com.example.demo1.ObservableScrollView>
  79. </LinearLayout>

最后activity代码如下,

  1. package com.example.demo1;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.view.Menu;
  5. public class MainActivity extends Activity implements ScrollViewListener {
  6. private ObservableScrollView scrollView1 = null;
  7. private ObservableScrollView scrollView2 = null;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. scrollView1 = (ObservableScrollView) findViewById(R.id.view1);
  13. scrollView1.setScrollViewListener(this);
  14. scrollView2 = (ObservableScrollView) findViewById(R.id.view2);
  15. scrollView2.setScrollViewListener(this);
  16. }
  17. @Override
  18. public boolean onCreateOptionsMenu(Menu menu) {
  19. // Inflate the menu; this adds items to the action bar if it is present.
  20. getMenuInflater().inflate(R.menu.main, menu);
  21. return true;
  22. }
  23. @Override
  24. public void onScrollChanged(ObservableScrollView scrollView, int x, int y,
  25. int oldx, int oldy) {
  26. if (scrollView == scrollView1) {
  27. scrollView2.scrollTo(x, y);
  28. } else if (scrollView == scrollView2) {
  29. scrollView1.scrollTo(x, y);
  30. }
  31. }
  32. }

Android 监听ScrollView的滑动相关推荐

  1. Android监听ScrollView滑动到顶端和底部

    package cn.testscrollview; import android.os.Bundle; import android.view.MotionEvent; import android ...

  2. Android监听屏幕的滑动事件

    实现监听屏幕上下左右滑动事件 前段时间为了实现这个功能在网上找了很多教程,发现很多教程都是很大的篇幅,对于像我这种一点都不了解的人GestureListener的人来说可能很难理解,动不动就是几百行代 ...

  3. Android中监听ScrollView滑动停止和滑动到底部

    1.监听ScrollView滑动停止: [java] view plaincopy /********************监听ScrollView滑动停止********************* ...

  4. android scrollview 滚动监听,Android开发之ScrollView的滑动监听

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

  5. android 触摸监听重写_Android监听屏幕的滑动事件

    实现监听屏幕上下左右滑动事件 前段时间为了实现这个功能在网上找了很多教程,发现很多教程都是很大的篇幅,对于像我这种一点都不了解的人GestureListener的人来说可能很难理解,动不动就是几百行代 ...

  6. Android 监听 WiFi 开关状态

    Android 监听 WiFi 开关状态 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854309 本文出自[赵彦军的博客] ...

  7. android 监听手机电量变化

    今天,简单讲讲如何监听手机电量的变化. 监听电量是不能静态注册的. 后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙. 不能静态注册的广播: and ...

  8. android 监听手机开机

    今天,简单讲讲  android 监听手机开机. 需求描述:有些时候,我们需要我们的程序在开机后能自动运行,在系统即将关闭时,能写入一些记录到指定的文件里. 一.开机广播监听: Android系统 ...

  9. android 监听屏幕是否锁屏

    今天,简单讲讲如何监听手机屏幕是否锁屏. 实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可 ...

最新文章

  1. 两条线段相切弧_两条直线间的圆弧连接
  2. C/C++中对链表操作的理解实例分析
  3. ABB 机器人 DRVIO_1通信报警
  4. jms mdb_MDB!= JMS,反之亦然
  5. Express学习笔记(基本使用,中间件,模块化路由,请求处理)
  6. Linux实战 | Centos6.8安装matlab的mount挂载问题的解决方法_3
  7. 13.TCP/IP 详解卷1 --- IGMP : Internet 管理组协议
  8. 数据结构与算法JavaScript描述——队列
  9. 图书馆管理系统——借书操作
  10. voc2012数据集详解
  11. Hadoop环境搭建与入门实例
  12. 【NLP_命名实体识别】Albert+BiLSTM+CRF模型训练、评估与使用
  13. 关于DSP2812的Timer0定时器配置程序的质疑
  14. 图解WinXP局域网共享设置步骤
  15. 决策树算法的Python实现—基于金融场景实操
  16. 中国浓咖啡行业市场供需与战略研究报告
  17. 网络系统管理赛项之Debian七. 2021年全国职业院校技能大赛将挑选各省1人或1组队伍参赛
  18. php json_encode不要反斜杠,【json+encode让URL内容斜杠+不转义】
  19. Vue入门之vue框架简介库和框架的区别MVVM介绍安装vuevue所管理的边界双向数据绑定vue事件vue的生命周期
  20. 11 Django REST Framework 针对基于类的视图添加 @csrf_exempt

热门文章

  1. 【Google Play】IARC 年龄分级 ( IARC 国际年龄分级联盟 | Google Play 设置应用年龄分级 )
  2. 【运筹学】匈牙利法 ( 克尼格定理 | 匈牙利法引入 )
  3. 【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )
  4. intellijidea课程 intellijidea神器使用技巧 3-1 列操作
  5. 重写equals就必须重写hashCode的原理分析
  6. POJ 3264 Balanced Lineup
  7. IbatisNet开发使用小结
  8. PHP创建XML文件讲解
  9. HTML5本地存储localstorage
  10. @Autowired