国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android下拉刷新與輪播圖滑動沖突解決方案

2019-12-12 03:47:34
字體:
供稿:網(wǎng)友

最近在開發(fā)中遇到了這樣一個問題,在下拉刷新組件中包含了一個輪播圖組件,當(dāng)左右滑動的圖片時很容易觸發(fā)下拉刷新,如下圖所示:

如圖中紅色箭頭所示方向切換輪播圖,很容易觸發(fā)下拉刷新。網(wǎng)上查了很多方法,發(fā)現(xiàn)都不能很好的解決,于是自己研究了下。

我選用的第三方控件

1.下拉刷新我選用的是chanven的CommonPullToRefresh(系統(tǒng)自帶的SwipeRefreshLayout也應(yīng)該是一樣的道理);

2.輪播圖選用的是daimajia的AndroidImageSlider(用ViewPager也是一樣的道理)。具體界面自行腦補(bǔ)哈。

解決方案

我們仔細(xì)分析一下,我們要解決的實(shí)際上就是控件的事件攔截問題。現(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);  }}

我們可以看到,其實(shí)很簡單,關(guān)鍵就是判斷當(dāng)前位置相對于初始位置的滑動方向。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 政和县| 固安县| 抚松县| 焉耆| 凤山市| 东宁县| 广平县| 图片| 扬州市| 神池县| 台中县| 云南省| 兰溪市| 恭城| 兴山县| 枣阳市| 吉木乃县| 长治县| 师宗县| 唐山市| 隆化县| 洞头县| 长宁县| 酉阳| 毕节市| 苍梧县| 伊川县| 宁明县| 土默特右旗| 青州市| 乌海市| 辰溪县| 馆陶县| 龙井市| 伊通| 同江市| 九龙城区| 恭城| 平塘县| 林甸县| 榆林市|