日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Android監(jiān)聽ScrollView滑動距離的簡單處理_Android

作者:輝son ? 更新時間: 2022-04-21 編程語言

本文實例為大家分享了Android監(jiān)聽ScrollView滑動距離的具體方法,供大家參考,具體內(nèi)容如下

使用ScrollView時,有時候我們需要要獲取它滑動的距離,Android的API給我們提供了設置監(jiān)聽的方法:

scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

? ? ? ? ? ? }
? ? ? ? });

很遺憾的是:Call requires API 23
點進去看下View里面的OnScrollChangeListener在哪個方法里面監(jiān)聽位置:

/**
? ? ?* 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);
? ? ? ? }
? ? }

一看其實實現(xiàn)不難,不就是自定義個ScrollView, 里面多寫個監(jiān)聽, 實現(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);

? ? }
}

使用簡單:

scrollView.setOnScollChangedListener(new ObservableScrollView.OnScollChangedListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy){
? ? ? ? ? ? }
? ? ? ? });

原文鏈接:https://blog.csdn.net/u014798175/article/details/51345196

欄目分類
最近更新