生活随笔
收集整理的這篇文章主要介紹了
Android 监听ScrollView的滑动
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
有時候我們需要監(jiān)聽ScroView的滑動情況,比如滑動了多少距離,是否滑到布局的頂部或者底部。可惜的是SDK并沒有相應的方法,不過倒是提供了一個?
protected?void?onScrollChanged(int?x,?int?y,?int?oldx,?int?oldy)??
? ?方法,顯然這個方法是不能被外界調(diào)用的,因此就需要把它暴露出去,方便使用。解決方式就是寫一個接口,?
package?com.example.demo1;?? ?? public?interface?ScrollViewListener?{?? ?? ????void?onScrollChanged(ObservableScrollView?scrollView,?int?x,?int?y,?int?oldx,?int?oldy);?? ?? }??
?
?
? 然后重寫ScrollView類,給它提供上面寫的回調(diào)接口。?
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的滑动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。