欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android側(cè)滑菜單和輪播圖之滑動(dòng)沖突問(wèn)題

 更新時(shí)間:2017年06月09日 08:29:06   作者:掌握當(dāng)下  
這篇文章主要介紹了Android側(cè)滑菜單和輪播圖之滑動(dòng)沖突問(wèn)題,需要的朋友可以參考下

接手一個(gè)項(xiàng)目,有一個(gè)問(wèn)題需要修改:輪播圖不能手動(dòng)滑動(dòng),手動(dòng)滑動(dòng)輪播圖只會(huì)觸發(fā)側(cè)滑菜單。

猜測(cè):viewpager控件(輪播圖)的觸摸事件被SlidingMenu控件(側(cè)滑菜單,非第三方項(xiàng)目,乃是上個(gè)開(kāi)發(fā)人員自定義的)攔截了。

基于這個(gè)猜測(cè),我自定義一個(gè)ViewPager,重寫(xiě)dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent,分別在這三個(gè)方法中打印log;

重寫(xiě)SlidingMenu的dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent,同樣打印log。

重新編譯運(yùn)行,手滑輪播圖,log如下:

06-08 09:52:08.394 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:0
06-08 09:52:08.395 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:0
06-08 09:52:08.395 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:0
06-08 09:52:08.395 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:0
06-08 09:52:08.441 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.441 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:2
06-08 09:52:08.442 19424-19424/com.parkingmore E/SlidingMenu: ACTION_MOVE dx:15.473999
06-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: ACTION_MOVE getCurrentItem():1
06-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:2
06-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:2
06-08 09:52:08.459 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.459 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:2
06-08 09:52:08.459 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:3
06-08 09:52:08.459 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:3
06-08 09:52:08.477 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.477 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.495 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.495 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.515 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.515 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.533 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.533 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.551 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.551 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.574 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.574 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.594 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.595 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.611 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.612 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.622 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.622 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.623 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:1

從log中可以看出,該開(kāi)始,還能將滑動(dòng)事件傳遞給ViewPager,之后,就被SlidingMenu攔截了。這個(gè)log證實(shí)了這個(gè)猜想是正確的。

知道了原因就好解決了,我現(xiàn)在要考慮的是:要達(dá)到什么樣的效果。

預(yù)期效果:可以正?;瑒?dòng)輪播圖,當(dāng)輪播圖在第一張時(shí),可以滑到側(cè)滑菜單。

網(wǎng)上有人分享過(guò)類(lèi)似的問(wèn)題。我這里也借鑒了一下。

先來(lái)實(shí)現(xiàn)第一個(gè)功能:可以正?;瑒?dòng)輪播圖。

可以設(shè)一個(gè)全局變量:public static boolean mRollViewPagerTouching;

用來(lái)表示是否在觸摸輪播圖。

在自定義ViewPager中,判斷是否在觸摸輪播圖

public boolean dispatchTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
      case MotionEvent.ACTION_MOVE:
        break;
      case MotionEvent.ACTION_DOWN:
        MyApplication.mRollViewPagerTouching = true;
        break;
      case MotionEvent.ACTION_UP:
        MyApplication.mRollViewPagerTouching = false;
        break;
    }
    return super.dispatchTouchEvent(ev);
  }

在SlidingMenu中,做出如下處理

public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (MyApplication.mRollViewPagerTouching){
      return false;
    }
    return super.onInterceptTouchEvent(ev);
  }

重新編譯運(yùn)行,可以正?;瑒?dòng)輪播圖,但是當(dāng)輪播圖在第一張時(shí),不能滑到側(cè)滑菜單。

現(xiàn)在來(lái)做第二個(gè)功能:當(dāng)輪播圖在第一張時(shí),可以滑到側(cè)滑菜單。

這里有兩個(gè)地方要注意:1.當(dāng)輪播圖在第一張時(shí);2.由于我的側(cè)滑菜單是在左邊,需要手指向右滑動(dòng)進(jìn)入側(cè)滑菜單,所以,第二個(gè)條件,應(yīng)該是右滑。

在以上的基礎(chǔ)上,修改自定義ViewPager代碼

public boolean dispatchTouchEvent(MotionEvent ev) {
    //在觸發(fā)時(shí)回去到起始坐標(biāo)
    float x = ev.getX();
    switch (ev.getAction()) {
      case MotionEvent.ACTION_MOVE:
        //獲取到距離差
        float dx = x - downX;
        //防止是按下也判斷
        if (Math.abs(dx) > 8) {
          //通過(guò)距離差判斷方向
          if (dx > 0) {
            //                "右";
            if (getCurrentItem() == 0) {
              MyApplication.mRollViewPagerTouching = false;
            } else {
              MyApplication.mRollViewPagerTouching = true;
            }
          } else {
            //                "左";
            MyApplication.mRollViewPagerTouching = true;
          }
        }
        break;
      case MotionEvent.ACTION_DOWN:
        //將按下時(shí)的坐標(biāo)存儲(chǔ)
        downX = x;
        MyApplication.mRollViewPagerTouching = true;
        break;
      case MotionEvent.ACTION_UP:
        MyApplication.mRollViewPagerTouching = false;
        break;
    }
    return super.dispatchTouchEvent(ev);
  }

再次編譯運(yùn)行,成功達(dá)到預(yù)期效果。

相關(guān)文章

  • Android實(shí)現(xiàn)注冊(cè)登錄界面的實(shí)例代碼

    Android實(shí)現(xiàn)注冊(cè)登錄界面的實(shí)例代碼

    這篇文章主要介紹了Android實(shí)現(xiàn)注冊(cè)登錄界面的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 詳解Android全局異常的捕獲處理

    詳解Android全局異常的捕獲處理

    這篇文章主要為大家介紹了Android全局異常的捕獲處理,為什么要進(jìn)行捕獲處理,如何進(jìn)行捕獲處理,想要了解的朋友可以參考一下
    2016-01-01
  • Kotlin語(yǔ)言使用BroadcastReceiver示例介紹

    Kotlin語(yǔ)言使用BroadcastReceiver示例介紹

    Android開(kāi)發(fā)的四大組件分別是:活動(dòng)(activity),用于表現(xiàn)功能;服務(wù)(service),后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn);廣播接受者(Broadcast Receive),勇于接收廣播;內(nèi)容提供者(Content Provider),支持多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù),本篇著重介紹廣播組件
    2022-09-09
  • Android實(shí)現(xiàn)NFC讀取校園卡

    Android實(shí)現(xiàn)NFC讀取校園卡

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)NFC讀取校園卡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Android中View自定義組合控件的基本編寫(xiě)方法

    Android中View自定義組合控件的基本編寫(xiě)方法

    這篇文章主要介紹了Android中View自定義組合控件的基本編寫(xiě)方法,可以在布局的時(shí)候更加隨意地繼承,需要的朋友可以參考下
    2016-04-04
  • Android Bluetooth藍(lán)牙技術(shù)使用流程詳解

    Android Bluetooth藍(lán)牙技術(shù)使用流程詳解

    這篇文章主要介紹了Android Bluetooth藍(lán)牙技術(shù)使用流程詳解的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Android自定義View實(shí)現(xiàn)彈性小球效果

    Android自定義View實(shí)現(xiàn)彈性小球效果

    前段時(shí)間看到一個(gè)功能,是一個(gè)小球沿著固定軌跡彈動(dòng)的效果,那么這篇文章小編給大家分享在Android中如何自定義View來(lái)實(shí)現(xiàn)彈性小球的效果,有需要的可以參考借鑒。
    2016-09-09
  • Android注冊(cè)登錄實(shí)時(shí)自動(dòng)獲取短信驗(yàn)證碼

    Android注冊(cè)登錄實(shí)時(shí)自動(dòng)獲取短信驗(yàn)證碼

    注冊(cè)登錄或修改密碼功能常常需要輸入短信驗(yàn)證碼,如何自動(dòng)獲取短信驗(yàn)證碼,這篇文章就為大家介紹了Androidcv注冊(cè)登錄自動(dòng)獲取短信驗(yàn)證碼的實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解

    Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解

    這篇文章主要為大家介紹了Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Kotlin中標(biāo)準(zhǔn)函數(shù)run、with、let、also與apply的使用和區(qū)別詳解

    Kotlin中標(biāo)準(zhǔn)函數(shù)run、with、let、also與apply的使用和區(qū)別詳解

    相比Java, Kotlin提供了不少高級(jí)語(yǔ)法特性。對(duì)于一個(gè)Kotlin的初學(xué)者來(lái)說(shuō)經(jīng)常會(huì)寫(xiě)出一些不夠優(yōu)雅的代碼,下面這篇文章主要給大家介紹了關(guān)于Kotlin中標(biāo)準(zhǔn)函數(shù)run、with、let、also與apply的使用和區(qū)別的相關(guān)資料,需要的朋友可以參考下。
    2018-03-03

最新評(píng)論