1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android 监听ScrollView的滑动

Android 监听ScrollView的滑动

时间:2020-01-14 05:49:37

相关推荐

Android 监听ScrollView的滑动

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

protectedvoidonScrollChanged(intx,inty,intoldx,intoldy)

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

packagecom.example.demo1; publicinterfaceScrollViewListener{ voidonScrollChanged(ObservableScrollViewscrollView,intx,inty,intoldx,intoldy); }

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

packagecom.example.demo1; importandroid.content.Context; importandroid.util.AttributeSet; importandroid.widget.ScrollView; publicclassObservableScrollViewextendsScrollView{ privateScrollViewListenerscrollViewListener=null; publicObservableScrollView(Contextcontext){ super(context); } publicObservableScrollView(Contextcontext,AttributeSetattrs, intdefStyle){ super(context,attrs,defStyle); } publicObservableScrollView(Contextcontext,AttributeSetattrs){ super(context,attrs); } publicvoidsetScrollViewListener(ScrollViewListenerscrollViewListener){ this.scrollViewListener=scrollViewListener; } @Override protectedvoidonScrollChanged(intx,inty,intoldx,intoldy){ super.onScrollChanged(x,y,oldx,oldy); if(scrollViewListener!=null){ scrollViewListener.onScrollChanged(this,x,y,oldx,oldy); } } }

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

<LinearLayoutxmlns:android="/apk/res/android" xmlns:tools="/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代码如下,

packagecom.example.demo1; importandroid.os.Bundle; importandroid.app.Activity; importandroid.view.Menu; publicclassMainActivityextendsActivityimplementsScrollViewListener{ privateObservableScrollViewscrollView1=null; privateObservableScrollViewscrollView2=null; @Override protectedvoidonCreate(BundlesavedInstanceState){ 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 publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.main,menu); returntrue; } @Override publicvoidonScrollChanged(ObservableScrollViewscrollView,intx,inty, intoldx,intoldy){ if(scrollView==scrollView1){ scrollView2.scrollTo(x,y); }elseif(scrollView==scrollView2){ scrollView1.scrollTo(x,y); } } }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。