android 布局 使用 viewPager 時,如何解決 和 子頁面 長按滑動 衝突問題

來源:互聯網
上載者:User

標籤:

使用 viewPager 時,如何解決 和 子頁面 長按滑動 衝突問題。

 

我的問題原型:

 

     這個問題,我相信遇到的人會比較少,我是在 一個 viewPager 中,其中 一個 fragment 中實現了長按滑動圖片的功能,而發現它們兩者的

onTouchEvent事件衝突。

 

嘗試過的解決方案:

    1-----

     遇到這問題,首先是百度,百度到的方法有,自訂 viewPager,在裡面重寫    onTouchEvent  和 onInterceptTouchEvent,具體代碼是下面,這種方法,我嘗試

後發現,只能在第一次載入 viewPager的 頁面達到 阻斷的效果,我這裡詳細說下,在MainActivity 頁面裡面,我們初始化了 viewPager,然後我們要在 第二個頁面的

fragment 中實現阻斷,這時候,你可能會嘗試 在 fragment 中new 一個 MainActivity 的對象,然後想方設法 擷取它 裡面的 viewPager,或者是 引入與 MainActivity

綁定好了的 xml檔案,再 在 fragment 中 findViewById() 來擷取次 viewPager。 然後使用 自訂 viewPager 裡面的 函數。

     很不幸,我上述談到的方法,我都試過了, all failed。

 

 1 package com.LGH.weixin; 2  3 /** 4  * Created by Administrator on 2015/5/30. 5  */ 6 import android.content.Context; 7 import android.support.v4.view.ViewPager; 8 import android.util.AttributeSet; 9 import android.util.Log;10 import android.view.MotionEvent;11 12 13 public class myViewPager extends ViewPager {14 15     private boolean enabled = true; // 預設是 可以側滑的16 17 18     public myViewPager(Context context, AttributeSet attrs) {19         super(context, attrs);20     }21 22     public void setStopViewPagerSlip(boolean enabled){23         this.enabled = enabled;24         Log.i("--------------------","////"+this.enabled);25     }26     //觸摸沒有反應就可以了27     @Override28     public boolean onTouchEvent(MotionEvent event) {29         if (this.enabled) {30             return super.onTouchEvent(event);31         }32         return false;33     }34 35 36     @Override37     public boolean onInterceptTouchEvent(MotionEvent event) {38         if (this.enabled) {39             return super.onInterceptTouchEvent(event);40         }41         return false;42     }43 }

 

      2-----

       第二種方法是我最後真正解決了的。剛開始的時候,使用有誤,導致失敗。

       方法: view.requestDisallowInterceptTouchEvent(true); //傳入參數是 true 即可

       我第一次使用它失敗的原因是:

            在 我的 fragment中,由於 viewPager 它本是就是一個 view,所以 我使用 該方法的時候,就直接 

            viewPager .requestDisallowInterceptTouchEvent(true); 結果是失敗的。  在子 view 中正確使用方法是 下面 ↓

 

    解決方案:

    view.requestDisallowInterceptTouchEvent(true);中使用的 view 要求是你當前 fragment 引入的xml 返回的 view,而且 改為:

    view.getParent().requestDisallowInterceptTouchEvent(true);

    此時方能真正解決!  下面 引入些必要的 代碼。

     

1 View main = inflater.inflate(R.layout.apart_center,container,false);
1 main.getParent().requestDisallowInterceptTouchEvent(true);

 

android 布局 使用 viewPager 時,如何解決 和 子頁面 長按滑動 衝突問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.