Android下拉刷新與輪播圖滑動沖突解決方案
最近在開發(fā)中遇到了這樣一個問題,在下拉刷新組件中包含了一個輪播圖組件,當(dāng)左右滑動的圖片時很容易觸發(fā)下拉刷新,如下圖所示:
如圖中紅色箭頭所示方向切換輪播圖,很容易觸發(fā)下拉刷新。網(wǎng)上查了很多方法,發(fā)現(xiàn)都不能很好的解決,于是自己研究了下。
我選用的第三方控件
1.下拉刷新我選用的是chanven的CommonPullToRefresh(系統(tǒng)自帶的SwipeRefreshLayout也應(yīng)該是一樣的道理);
2.輪播圖選用的是daimajia的AndroidImageSlider(用ViewPager也是一樣的道理)。具體界面自行腦補哈。
解決方案
我們仔細(xì)分析一下,我們要解決的實際上就是控件的事件攔截問題?,F(xiàn)在的情況是外層的控件已經(jīng)攔截了斜著滑動的事件,那么我們只要讓外層的控件把這個事件分發(fā)下去就可以了【在dispatchTouchEvent(MotionEvent ev)方法中處理】,那么問題來了,怎么判斷斜著的事件。網(wǎng)上有很多方案,但都不是很完美。我想到了一種,跟大家分享一下,先看圖:
方案分析
1.圖一中x=y,作為臨界條件,這時α剛好等于45°;
2.圖二中x<y,α>45°,這時我們判斷為上下移動;
3.圖三中x>y,α<45°,這時我們判斷為左右移動。
那么我們只要判斷tan(α)與tan(45)的關(guān)系就能判斷是左右還是上下移動。我們寫一個類繼承PtrClassicFrameLayout,下面是關(guān)鍵代碼:
public class SubPtrClassicFrameLayout extends PtrClassicFrameLayout { private float mDownX; private float mDownY; public SubPtrClassicFrameLayout(Context context) { super(context); } public SubPtrClassicFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } public SubPtrClassicFrameLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mDownX = ev.getX(); mDownY = ev.getRawY(); break; case MotionEvent.ACTION_MOVE: float moveX = ev.getX(); float moveY = ev.getRawY(); float diffX = Math.abs(moveX - mDownX); float diffY = Math.abs(moveY - mDownY); boolean isHorizon = Math.tan(diffY / diffX) < Math.tan(45.0); if (isHorizon) { return dispatchTouchEventSupper(ev); } break; } return super.dispatchTouchEvent(ev); } }
我們可以看到,其實很簡單,關(guān)鍵就是判斷當(dāng)前位置相對于初始位置的滑動方向。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android自定義控件實現(xiàn)簡單的輪播圖控件
- Android ViewPager實現(xiàn)輪播圖效果
- Android自定義控件實現(xiàn)優(yōu)雅的廣告輪播圖
- Android實現(xiàn)基于ViewPager的無限循環(huán)自動播放帶指示器的輪播圖CarouselFigureView控件
- Android如何使用RecyclerView打造首頁輪播圖
- 簡單實現(xiàn)android輪播圖
- Android開發(fā)在輪播圖片上加入點擊事件的方法
- Android實現(xiàn)輪播圖無限循環(huán)效果
- Android實現(xiàn)ViewPage輪播圖效果
- android常見手動和自動輪播圖效果
相關(guān)文章
Material Design系列之自定義Behavior支持所有View
這篇文章主要為大家詳細(xì)介紹了Material Design系列之自定義Behavior支持所有View,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09Android存儲字符串?dāng)?shù)據(jù)到txt文件
這篇文章主要為大家詳細(xì)介紹了Android存儲字符串?dāng)?shù)據(jù)到txt文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10Android布局耗時監(jiān)測的三種實現(xiàn)方式
在Android應(yīng)用開發(fā)中,性能優(yōu)化是一個至關(guān)重要的方面,為了更好地監(jiān)測布局渲染的耗時,我們需要一種可靠的實現(xiàn)方案,本文將介紹三種針對Android布局耗時監(jiān)測的實現(xiàn)方案,幫助開發(fā)者及時發(fā)現(xiàn)并解決布局性能問題,需要的朋友可以參考下2024-03-03避免 Android中Context引起的內(nèi)存泄露
本文主要介紹Android中Context引起的內(nèi)存泄露的問題,這里對Context的知識做了詳細(xì)講解,說明如何避免內(nèi)存泄漏的問題,有興趣的小伙伴可以參考下2016-08-08Android優(yōu)化查詢加載大數(shù)量的本地相冊圖片
本文介紹了Android優(yōu)化查詢加載大數(shù)量的本地相冊圖片,可以方便的照片的查詢,,感興趣的小伙伴們可以參考一下。2016-10-10AndroidQ分區(qū)存儲權(quán)限變更及適配的實現(xiàn)
這篇文章主要介紹了AndroidQ分區(qū)存儲權(quán)限變更及適配的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06