Android監(jiān)聽(tīng)ScrollView滑動(dòng)距離的簡(jiǎn)單處理
本文實(shí)例為大家分享了Android監(jiān)聽(tīng)ScrollView滑動(dòng)距離的具體方法,供大家參考,具體內(nèi)容如下
使用ScrollView時(shí),有時(shí)候我們需要要獲取它滑動(dòng)的距離,Android的API給我們提供了設(shè)置監(jiān)聽(tīng)的方法:
scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { ? ? ? ? ? ? } ? ? ? ? });
很遺憾的是:Call requires API 23
點(diǎn)進(jìn)去看下View里面的OnScrollChangeListener在哪個(gè)方法里面監(jiān)聽(tīng)位置:
/** ? ? ?* This is called in response to an internal scroll in this view (i.e., the ? ? ?* view scrolled its own contents). This is typically as a result of ? ? ?* {@link #scrollBy(int, int)} or {@link #scrollTo(int, int)} having been ? ? ?* called. ? ? ?* ? ? ?* @param l Current horizontal scroll origin. ? ? ?* @param t Current vertical scroll origin. ? ? ?* @param oldl Previous horizontal scroll origin. ? ? ?* @param oldt Previous vertical scroll origin. ? ? ?*/ ? ? protected void onScrollChanged(int l, int t, int oldl, int oldt) { ? ? ? ? notifySubtreeAccessibilityStateChangedIfNeeded(); ? ? ? ? if (AccessibilityManager.getInstance(mContext).isEnabled()) { ? ? ? ? ? ? postSendViewScrolledAccessibilityEventCallback(); ? ? ? ? } ? ? ? ? mBackgroundSizeChanged = true; ? ? ? ? if (mForegroundInfo != null) { ? ? ? ? ? ? mForegroundInfo.mBoundsChanged = true; ? ? ? ? } ? ? ? ? final AttachInfo ai = mAttachInfo; ? ? ? ? if (ai != null) { ? ? ? ? ? ? ai.mViewScrollChanged = true; ? ? ? ? } ? ? ? ? if (mListenerInfo != null && mListenerInfo.mOnScrollChangeListener != null) { ? ? ? ? ? ? mListenerInfo.mOnScrollChangeListener.onScrollChange(this, l, t, oldl, oldt); ? ? ? ? } ? ? }
一看其實(shí)實(shí)現(xiàn)不難,不就是自定義個(gè)ScrollView, 里面多寫(xiě)個(gè)監(jiān)聽(tīng), 實(shí)現(xiàn)如下:
import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; /** ?* Created by hucanhui on 16/7/28. ?*/ public class ObservableScrollView extends ScrollView{ ? ? private OnScollChangedListener onScollChangedListener = 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 setOnScollChangedListener(OnScollChangedListener onScollChangedListener) { ? ? ? ? this.onScollChangedListener = onScollChangedListener; ? ? } ? ? @Override ? ? protected void onScrollChanged(int x, int y, int oldx, int oldy) { ? ? ? ? super.onScrollChanged(x, y, oldx, oldy); ? ? ? ? if (onScollChangedListener != null) { ? ? ? ? ? ? onScollChangedListener.onScrollChanged(this, x, y, oldx, oldy); ? ? ? ? } ? ? } ? ? public interface OnScollChangedListener { ? ? ? ? void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); ? ? } }
使用簡(jiǎn)單:
scrollView.setOnScollChangedListener(new ObservableScrollView.OnScollChangedListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy){ ? ? ? ? ? ? } ? ? ? ? });
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android使用SkinManager實(shí)現(xiàn)換膚功能的示例
本篇文章主要介紹了android使用SkinManager實(shí)現(xiàn)換膚功能的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Android五種隱藏狀態(tài)欄和標(biāo)題欄的方法
這篇文章主要介紹了Android五種隱藏狀態(tài)欄和標(biāo)題欄的方法的相關(guān)資料,需要的朋友可以參考下2017-05-05Android軟件啟動(dòng)動(dòng)畫(huà)及動(dòng)畫(huà)結(jié)束后跳轉(zhuǎn)的實(shí)現(xiàn)方法
這篇文章主要介紹了Android軟件啟動(dòng)動(dòng)畫(huà)及動(dòng)畫(huà)結(jié)束后跳轉(zhuǎn)的實(shí)現(xiàn)方法,實(shí)例分析了Android圖片播放及定時(shí)器的相關(guān)使用技巧,非常具有使用價(jià)值,需要的朋友可以參考下2015-10-10Android自定義View實(shí)現(xiàn)價(jià)格區(qū)間選擇控件
這篇文章主要為大家詳細(xì)介紹了Android如何利用自定義View實(shí)現(xiàn)價(jià)格區(qū)間選擇控件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-11-11Android中的Fragment類(lèi)使用進(jìn)階
這篇文章主要介紹了Android中的Fragment類(lèi)使用進(jìn)階,重點(diǎn)講解了Fragment與Activity的交互以及Fragment間的數(shù)據(jù)傳遞,需要的朋友可以參考下2016-04-04Android和iOS 測(cè)試五個(gè)最好的開(kāi)源自動(dòng)化工具
本文主要介紹Android和iOS 五個(gè)最好的開(kāi)源自動(dòng)化工具,這里整理了相關(guān)資料,希望能幫助測(cè)試軟件的朋友,有需要的看下2016-09-09Jetpack?Compose?Canvas繪制超詳細(xì)介紹
Canvas?是允許您在屏幕上指定區(qū)域并在此區(qū)域上執(zhí)行繪制的組件。您必須使用修飾符指定尺寸,無(wú)論是通過(guò)Modifier.size修飾符指定確切尺寸,還是通過(guò)Modifier.fillMaxSize,ColumnScope.weight等相對(duì)于父級(jí)指定精確尺寸。如果父級(jí)包裝了此子級(jí),則僅必須指定確切尺寸2022-10-10OpenGL Shader實(shí)例分析(7)雪花飄落效果
這篇文章主要為大家詳細(xì)介紹了OpenGL Shader實(shí)例分析第7篇,實(shí)現(xiàn)雪花飄落效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02android實(shí)現(xiàn)給未簽名的apk簽名方法
下面小編就為大家?guī)?lái)一篇android實(shí)現(xiàn)給未簽名的apk簽名方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12