1. 程式人生 > >android 滑動衝突

android 滑動衝突

在android開發中會經常遇到各種問題,比較常見之一就有滑動衝突問題,只要出現滑動衝突,demo或者專案就無法正常工作,

那麼問題是滑動衝突時怎麼產生的,我們又應該如何解決這個滑動衝突問題那,其實在介面中只要內外兩層同時可以滑動,這個時候就會產生滑動衝突,我們如何解決這個問題呢?這是一個簡單又複雜的問題,簡單因為滑動衝突有固定的解決辦法,下面就分析一下滑動衝突,

1.我們常見的滑動衝突場景

@1. 場景一:

外部滑動方向和內部滑動方向不一致,(外部上下,內部左右)

主要是講ViewPager和Fragment配合使用所組成的頁面效果,主流的應用幾乎都是使用這個效果,我們可以通過左右滑動來切換頁面,每個頁面又是一個上下滑動的列表,這種情況下是有滑動衝突的,但是ViewPager內部處理了這種滑動衝突,

除了這種典型的案例之外,還存在其他情況,比如外部上下滑動,內部左右滑動,但是他們屬於同一種滑動衝突。

@2. 場景二:

外部滑動方向和內部滑動方向一致 (內部上下 外部上下)

這種情況會相對於複雜一些,當內外兩層都在同一方向可以滑動的時候,當我們手指開始滑動的時候,系統是無法知道使用者到底希望哪一層是滑動的,因為只能有一層可以滑動,要麼是內層,要麼是外層,

@3. 場景三:

上面情況的巢狀模式(具體不追訴)

這種情況屬於場景一和場景二的巢狀實現,看起來場景三更復雜一些,只要我們理解他的滑動衝突規則,一個一個解決,是挺簡單的。

2.處理規則

我們比較常見的是場景一和場景二,場景三是比較不常見的,並不代表不會出現,一點出現,按照場景一的規則一步一步處理,其實原理一樣,本文中就不追訴場景三了。

場景一:

當用戶左右滑動時,需要外部的view攔截點選事件,當用戶上下滑動時,需要讓內部的View攔截點選事件(就是水平還是豎直滑動時解決滑動衝突)

場景二:

我們無法根據滑動的角度距離差來做判斷,通過業務上找突破口,另一種狀態時,內部View來相應View的滑動事件。

3.滑動衝突的具體解決辦法

我們通過內部攔截和外部攔截解決滑動衝突。

1)外部攔截:

點選事件先經過父容器的攔截處理,如果父容器需要此事件就攔截,不需要此事件就不攔截,

(外部攔截法需要重寫父容器的OnIntertptTouchEvent方法在內部做相應的攔截即可)

2)外部攔截:

內部攔截就是指父容器不攔截任何事件,所有的事件都傳遞給子元素,如果子元素需要此事件就直接消費掉,否則交父容器進行處理。(我們重寫子元素的dispatchTouchEvent方法,內部攔截法與事件分發機制不一致,需要配合ReustDisallowInterpetTOuchEvent方法正常工作,)

內部攔截法沒有外部攔截法簡單易用,建議大家使用外部攔截法,進行解決滑動衝突事件。

相關推薦

Android 滑動衝突的解決方法

一、常見的滑動衝突場景 場景1——外部滑動方向和內部滑動方向不一致,如:ViewPager中有多個fragment,而fragment中有ListView,這時ViewPager可以左右滑動,而ListView可以上下滑動,這就造成了滑動衝突。注意:這只是舉個例子說明一下場

Android滑動衝突解決方法

敘述 滑動衝突可以說是日常開發中比較常見的一類問題,也是比較讓人頭疼的一類問題,尤其是在使用第三方框架的時候,兩個原本完美的控制元件,組合在一起之後,忽然發現整個世界都不好了。 關於滑動衝突 滑動衝突分類### 滑動衝突,總的來說就是兩類。 同方向滑動衝突 比

webview輪播圖與Android滑動衝突的解決辦法

在Android中我們經常需要左右滑動,其中內嵌的web頁面也有滑動動作。輪播圖舉例:需要左右翻頁時,會觸發Android中的ViewPager導致翻頁到另一個頁面輪播圖翻頁翻不動,或失效。但是由於安卓是父,而Web是子。在Web中不論你做什麼處理,都管不了父視窗的事情,所以

android-----滑動衝突解決案例

        之前的幾篇部落格,我測試了View事件分發機制中的一些知識點,我們理解事件分發機制的目的就是為了能夠更好了知道View中事件的傳遞過程進而能夠對於滑動衝突有針對性的解決措施,今天我們通過一個翻頁例項來學習下滑動處理的方式之一-----外部攔截法;      

Android滑動衝突解決方式(下拉重新整理上拉載入更多,適配RecyclerView/ListView/ScrollView)

@Override public boolean judgeIntercept(float curInterceptY, float lastInterceptY, boolean isHeaderShow, boolean isFooterShow, boolean allowLoadM

android滑動衝突的解決方案

一、前言 Android 中解決滑動的方案有2種:外部攔截法 和內部攔截法。 滑動衝突也存在2種場景: 橫豎滑動衝突、同向滑動衝突。 所以我就寫了4個例子來學習如何解決滑動衝突的,這四個例子分別為: 外部攔截法解決橫豎衝突、外部攔截法解決同向衝突、內部

android 滑動衝突

在android開發中會經常遇到各種問題,比較常見之一就有滑動衝突問題,只要出現滑動衝突,demo或者專案就無法正常工作, 那麼問題是滑動衝突時怎麼產生的,我們又應該如何解決這個滑動衝突問題那,其實在介面中只要內外兩層同時可以滑動,這個時候就會產生滑動衝突,我們如何解決這個

每日一問:Android 滑動衝突,你們都是怎樣處理的

堅持原創日更,短平快的 Android 進階系列,敬請直接在微信公眾號搜尋:nanchen,直接關注並設為星標,精彩不容錯過。 在 Android 開發中,滑動衝突總是我們一個無法避免的話題。而對於解決方案卻是眾說紛紜。比如 RecyclerView 巢狀 RecyclerView,直接通過相關方法禁掉內部

Android PtrFrameLayout 與RecyclerView滑動衝突解決方法

原文地址:https://blog.csdn.net/Simon_Crystin/article/details/80926795   1.背景 2.主要程式碼邏輯 2.1 父View程式碼(PtrFrameLayout) 2.2 子View關鍵程式碼(RecyclerView)

Android事件分發機制以及滑動衝突處理

轉載請註明出處:http://blog.csdn.net/u013038616/article/details/50733811 方便日後的檢視與交流,將學習與實踐總結如下。 一、Android事件傳遞分析 1、ViewGroup中事件分發機制相關的方法 a、dispatchTo

Android:禁止viewpager左右滑動,去除viewpager切換時動畫,解決viewpager與百度地圖滑動衝突

Android自定義viewpager,禁止viewpager左右滑動,去除viewpager切換時動畫,解決viewpager與百度地圖滑動衝突 public class CustomViewPager extends ViewPager { private boolean e

Android NestedScrolling解決滑動衝突問題(2) - fling問題與NestedScroll++

滑動的處理 在前一篇文章 Android NestedScrolling解決滑動衝突問題(1) - 相關介面 中,我們分析瞭解決滑動衝突問題的 NestedScroll 介面,也給出瞭解決此類問題的一般性方案: NestedScrollingChild側 NestedScro

Android NestedScrolling解決滑動衝突問題(1) - 相關介面

Android NestedScrolling解決滑動衝突問題 當父View及子View都可以滑動,並且滑動方向一致時(例如CoordinatorLayout內嵌RecyclerView或者Webview),滑動衝突的解決就需要依賴於Android為我們提供的NestedScroll

Android ScrollView巢狀Banner於RecyclerView滑動衝突解決

首先是佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http:/

Android View 的事件分發原理和滑動衝突分析

作為一名Android 開發者,每天接觸最多的就是 View 了。Android View 雖然不是四大元件,但其並不比四大元件的地位低。而 View 的核心知識點事件分發機制則是不少剛入門同學的攔路虎,也是面試過程中基本上都會問的。理解 View 的事件能夠讓你寫出更好自定義 View 以及解決滑動衝突。

Android Viewpager巢狀Viewpager滑動衝突

場景:tablayout繫結viewpager,viewpager巢狀fragement,其中一個fragment中嵌套了一個子viewpager,導致不能正常滑動。 解決方法: 重寫viewpager的canScroll()方法。 @Override protected bo

Android---SwipeRefreshLayout巢狀ViewPager時的滑動衝突

SwipeRefreshLayout巢狀ViewPager 最近在專案中用到了SwipeRefreshLayout控制元件,以實現下拉重新整理,在我的SwipeRefreshLayout佈局中存在一個ViewPager。那麼問題就出現了,當我對ViewPager

Android關於CoordinatorLayout和ListView滑動衝突的解決(上滑ToolBar隱藏,下滑出現)

最近專案中使用到了CoordinatorLayout這種佈局方式,搭配RecycleView,實現起來比較簡單,而且不用自己處理滑動事件,但是改為了ListView後發生了滑動衝突. 所以想到了以下解決方案: 1.使用事件分發,當ListView在Y軸滑動時,將事件交給C

Android控制元件-ScrollView 和WebView之見滑動衝突解決

   需求:               最近在做一個webView載入網頁的頁面,最外層是一個scrollView,因為還有標題等其他資料是需要單獨獲取載入,所以scrollview中是包含一個其他資訊的頭部佈局和一個載入網頁資訊的WebView,當滑動的時候,頭部和We

Android實踐之ScrollView中滑動衝突處理

1. 前言        在Android開發中,如果是一些簡單的佈局,都很容易搞定,但是一旦涉及到複雜的頁面,特別是為了相容小屏手機而使用了ScrollView以後,就會出現很多點選事件的衝突,最經典的就是ScrollView中嵌套了ListView