但未對連接嘗試做出檢測到響應,滑動到底部或頂部響應的ScrollView實現

 2023-10-27 阅读 19 评论 0

摘要:轉:http://www.trinea.cn/android/滑動到底部或頂部響應的scrollview/ 但未對連接嘗試做出檢測到響應、兩種實現方式的主要不同點在于判斷滑動位置的地方,第一種方式在onScrollChanged函數中判斷, 第二種在OnTouchListener的onTouch中判斷。其他如是否滾動到邊緣

轉:http://www.trinea.cn/android/滑動到底部或頂部響應的scrollview/

但未對連接嘗試做出檢測到響應、兩種實現方式的主要不同點在于判斷滑動位置的地方,第一種方式在onScrollChanged函數中判斷, 第二種在OnTouchListener的onTouch中判斷。其他如是否滾動到邊緣的判斷、響應事件接口OnBorderListener、對外暴露的接口都一樣。

第一種方式代碼可見onScrollChanged BorderScrollView@GoogleCode
第二種方式代碼可見OnTouchListener BorderScrollView@GoogleCode

dns沒有檢測到響應??

1、判斷是否已經滾動到頂部或底部,代碼如下:

private void doOnBorderListener() {if (contentView != null && contentView.getMeasuredHeight() <= getScrollY() + getHeight()) {//滾動到底部判斷if (onBorderListener != null) {onBorderListener.onBottom();}} else if (getScrollY() == 0) {//滾動到頂部判斷if (onBorderListener != null) {onBorderListener.onTop();}}
}
其中getChildAt表示得到ScrollView的child View,因為ScrollView只允許一個child view,所以contentView.getMeasuredHeight()表示得到子View的高度, getScrollY()表示得到y軸的滾動距離,getHeight()為scrollView的高度。當getScrollY()達到最大時加上scrollView的高度就的就等于它內容的高度了啊~

2、定義到達頂部和底部響應事件接口OnBorderListener,包含onTop和onBottom函數

/*** OnBorderListener, Called when scroll to top or bottom* * @author Trinea 2013-5-22*/
public static interface OnBorderListener {/*** Called when scroll to bottom*/public void onBottom();/*** Called when scroll to top*/public void onTop();
}

這個接口允許用戶自定義到達底部和頂部的響應事件。

第一種方式: 在onScrollChanged函數中判斷,主要代碼如下:

@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {super.onScrollChanged(x, y, oldx, oldy);doOnBorderListener();
}

在ScrollView的onScrollChanged函數中判斷是否到達頂部和底部,并進行相應事件調用,onScrollChanged函數在ScrollView中內容開始滾動時出發被調用。

第二種方式: 在OnTouchListener的onTouch中判斷,主要代碼如下:

?

this.onBorderTouchListener = new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_UP:doOnBorderListener();break;}return false;}};

表示在touch結束后,手指拿起時執行doOnBorderListener,進行判斷和響應。

?

兩種方式的比較:
第一種方式精確度高,但doOnBorderListener可能執行多次,因為ScrollView滑動中,onScrollChanged總是在不停被調用。
第二種方式不會造成doOnBorderListener多次執行,但卻可能一次都沒有調用。比如你快速滑動,還未到達底部手指已經松開,由于慣性滾動到底部,可能并不會執行doOnBorderListener。因為onTouch的ACTION_UP事件在手指松開已經接收到這時候卻還沒有到達底部。

兩種方式各有優劣,大家可酌情選擇。我要求準確響應,所以選擇了第一種,自己再做下控制確保不會多次執行。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/164539.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息