Android中实现监听ScrollView滑动事件

 更新时间:2015年05月06日 08:50:16   投稿:junjie  
这篇文章主要介绍了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布局的时候,不要写错了包。

复制代码 代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    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" > 
 
    <com.example.demo1.ObservableScrollView 
        android:id="@+id/view1" 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" > 
 
        <LinearLayout 
            android:layout_width="wrap_content" 
            android:layout_height="match_parent" 
            android:orientation="vertical" > 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试1" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试2" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试3" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试4" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试5" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试6" /> 
        </LinearLayout> 
    </com.example.demo1.ObservableScrollView> 
 
    <com.example.demo1.ObservableScrollView 
        android:id="@+id/view2" 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" > 
 
        <LinearLayout 
            android:layout_width="wrap_content" 
            android:layout_height="match_parent" 
            android:orientation="vertical" > 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试1" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试2" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试3" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试4" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试5" /> 
 
            <TextView 
                android:layout_width="100dp" 
                android:layout_height="100dp" 
                android:text="试试6" /> 
        </LinearLayout> 
    </com.example.demo1.ObservableScrollView> 
 
</LinearLayout> 
 

  最后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实现可拖拽带有坐标尺进度条的示例代码

    Android实现可拖拽带有坐标尺进度条的示例代码

    这篇文章主要为大家详细介绍了如何利用Android实现可拖拽带有坐标尺进度条的效果,文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2023-06-06
  • Flutter 实现虎牙/斗鱼 弹幕功能

    Flutter 实现虎牙/斗鱼 弹幕功能

    这篇文章主要介绍了Flutter 实现虎牙/斗鱼 弹幕功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android FrameWork之SytemServer进程fork示例

    Android FrameWork之SytemServer进程fork示例

    这篇文章主要为大家介绍了Android FrameWork之SytemServer进程fork示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Android ImageView的selector效果实例详解

    Android ImageView的selector效果实例详解

    这篇文章主要介绍了Android ImageView的selector效果实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • Android RecyclerView使用入门介绍

    Android RecyclerView使用入门介绍

    RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法
    2022-10-10
  • Android SQLite数据库连接实现登录功能

    Android SQLite数据库连接实现登录功能

    这篇文章主要为大家详细介绍了Android SQLite数据库连接实现登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • Android入门之系统设置Configuration类的使用教程

    Android入门之系统设置Configuration类的使用教程

    这篇文章主要给大家介绍一下Configuration类的使用,Configuration类是用来描述手机设备的配置信息的,比如屏幕方向, 触摸屏的触摸方式等,感兴趣的可以了解一下
    2022-12-12
  • Android编程简单实现雷达扫描效果

    Android编程简单实现雷达扫描效果

    这篇文章主要介绍了Android编程简单实现雷达扫描效果,涉及Android图形绘制及显示的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Flutter 滚动监听及实战appBar滚动渐变的实现

    Flutter 滚动监听及实战appBar滚动渐变的实现

    这篇文章主要介绍了Flutter 滚动监听及实战appBar滚动渐变,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Android实现双模(CDMA/GSM)手机短信监听的方法

    Android实现双模(CDMA/GSM)手机短信监听的方法

    这篇文章主要介绍了Android实现双模(CDMA/GSM)手机短信监听的方法,涉及Android短信的原理与相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论