欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Android 监听ScrollView的滑动

发布时间:2025/6/15 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Android 监听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 监听ScrollView的滑动的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。