『壹』 android錛宻wiperefreshlayout涓巚iewpager涓嬫媺鍐茬獊錛屾病婊戝埌欏墮儴灝卞埛鏂頒簡錛屾庝箞瑙e喅
婊戝姩鍐茬獊,鍙闇瑕佸湪瀛愭帶浠剁殑onTouch涓澧炲姞
getParent().(true);
琛ㄧず鍛婅瘔鐖舵帶浠訛紝涓嶈佸勭悊榪欎釜touch浜嬩歡,鍗沖彲瑙e喅婊戝姩鍐茬獊銆
榪介棶
viewPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
viewPager.(true);
....
return false;
}
});
榪欐牱鍐欒繕鏄娌″埌欏剁灝卞埛鏂頒簡錛
『貳』 關於android 觸屏事件與點擊事件沖突
你要先描述你要實現什麼樣的功能,再貼代碼,別人看起來更清晰些。
你的主要問題就是兩個事件都響應了相同的功能,造成沖突,對吧?那麼你可以設置一個成員變數(或者靜態變數)比較mHasHandled,先響應的事件把它設置為true,後響應的事件監測到它已經是true了就不再處理了。
『叄』 Android點擊事件和滑動沖突解決
對於一個根ViewGroup來說,發生點擊事件首先調用dispatchTouchEvent
如果這個ViewGroup的onIterceptTouchEvent返回true就表示它要攔截當前事件,接著這個ViewGroup的onTouchEvent就會被調用.如果onIterceptTouchEvent返回false,那麼就會繼續向下調用子View的dispatchTouchEvent方法,其實整體來說就是個責任鏈的模式,一層一層的進行分發,當某一層能處理的時候,事件消費結束,當任何一層都不處理的時候,事件返回到最上層。
當一個View需要處理事羨飢件的時候,如果它沒有設置onTouchListener,那麼直接調用onTouchEvent.如果設置了Listenter 那麼就要看Listener的onTouch方法返回值.為true就不調,為false就調onTouchEvent。onTouchListener中的onTouch方法每次都會先於view本身的onTouchEvent調用,且有優先消費權
View的默認實現會在onTouchEvent裡面把touch事件解析成Click之類的事件
點擊事件傳遞順序 Activity -> Window -> View
一旦一個元素攔截了某事件,那麼一個事件序列裡面後續的Move,Down事件都會交嫌清給它處理.並且它的onInterceptTouchEvent不會再調用
View的onTouchEvent默認都會消耗事件,除非它的clickable和longClickable都是false(不可點擊),但是enable屬性不會影響
外部調用一般是在外部的onInterceptTouchEvent的方法里,一般也是在move里判斷具體的滑動是否需要攔截,如果符合我們外部控制項的需求則返回true攔截,如果不符合則返回false不攔截,傳遞給子控制項。兩種方式其實原理都是一樣就是在move里去根據x和y的一個滑動距離來判斷具體將這次兄者返滑動事件交給誰去處理。
『肆』 Android listview滑動事件和上拉載入下拉刷新沖突
這個支持上拉載入下拉刷新的ListView,你是在android的ListView基礎上修改的?(通過onScrollListener)還是用的第三方開源庫?(PullTorRefresh之類)
輪播圖片又用的是什麼?ViewPager嗎?
沒有代碼參考,我也只能籠統的猜下
如果你用的是某些別人寫的,繼承自ListView的類,那l可能是這個類本身的上拉載入下拉刷新,就是利用內部創建onScrollListener實例,然後通過setScrollListener的方式設置給自己來實現的,所以你設置新的onScrollListener可能替換掉了原來默認的監聽器
另外也可能是手勢的事件沖突。而一般手勢事件沖突,有可能是由於手勢事件,在到達規定的View之前,就被被上層View「消耗」(攔截並處理)了。這種情況你可以寫個類繼承你現在ListView,重寫dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent方法,裡面直接調用父類的同名方法,但在之前輸出個Log,跟蹤下手勢事件去向
(參考android手勢事件處理機制,不清楚的話,可以看下網上針對dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent這三塊的詳細講解)