標籤:
使用 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 時,如何解決 和 子頁面 長按滑動 衝突問題