欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

成都創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以網(wǎng)站設(shè)計制作、成都做網(wǎng)站、移動互聯(lián)產(chǎn)品、全網(wǎng)整合營銷推廣服務(wù)為核心業(yè)務(wù)。十余年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標準網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

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

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

我選用的第三方控件

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

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

解決方案

我們仔細分析一下,我們要解決的實際上就是控件的事件攔截問題。現(xiàn)在的情況是外層的控件已經(jīng)攔截了斜著滑動的事件,那么我們只要讓外層的控件把這個事件分發(fā)下去就可以了【在dispatchTouchEvent(MotionEvent ev)方法中處理】,那么問題來了,怎么判斷斜著的事件。網(wǎng)上有很多方案,但都不是很完美。我想到了一種,跟大家分享一下,先看圖:

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

方案分析

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)鍵就是判斷當前位置相對于初始位置的滑動方向。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當前文章:Android下拉刷新與輪播圖滑動沖突解決方案
轉(zhuǎn)載源于:http://www.chinadenli.net/article36/piicsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站營銷型網(wǎng)站建設(shè)服務(wù)器托管移動網(wǎng)站建設(shè)電子商務(wù)網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化