解決AppBarLayout在華為手機6.0系統快速滑動時抖動問題
最近有個需求要做類似UC、今日頭條標題欄吸附懸停效果,相信大家會用CoordinatorLayout+AppBarLayout來實現,於是加入了專案中,效果是實現了,玩得很愉快,可是玩了一會發現一個原生的bug,問題描述如下:
用手指輕輕滑動CoordinatorLayout部分(, 上滑, 快速擡起手指, 形成一個fling操作. 其實就是向上滑動一下.這時, 整個CoordinatorLayout部分會向上移動(fling), 在停止移動之前, 在下面的白色區域(也就是xml佈局中的NestedScrollView)來一個反向的滑動(fling) , 這時整個頁面就會開始或大或小的抖動, 非常明顯.
螢幕錄製如下:
解決問題的方法如下:
自定義AppBarLayout的Behavior程式碼:
/** * 自定義AppBarLayout的Behavior解決華為手機6.0系統抖動問題 */ public class CustomBehavior extends AppBarLayout.Behavior { private OverScroller mScroller; public CustomBehavior() { } public CustomBehavior(Context context, AttributeSet attrs) { super(context, attrs); getParentScroller(context); } /** * 反射獲得滑動屬性。 * * @param context */ private void getParentScroller(Context context) { if (mScroller != null) return; mScroller = new OverScroller(context); try { Class<?> reflex_class = getClass().getSuperclass().getSuperclass();//父類AppBarLayout.Behavior父類的父類HeaderBehavior Field fieldScroller = reflex_class.getDeclaredField("mScroller"); fieldScroller.setAccessible(true); fieldScroller.set(this, mScroller); } catch (Exception e) { } } //fling上滑appbar然後迅速fling下滑recycler時, HeaderBehavior的mScroller並未停止, 會導致上下來回晃動 @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) { if (mScroller != null) { //當recyclerView 做好滑動準備的時候 直接幹掉Appbar的滑動 if (mScroller.computeScrollOffset()) { mScroller.abortAnimation(); } } if (type == ViewCompat.TYPE_NON_TOUCH && getTopAndBottomOffset() == 0) { //recyclerview的慣性比較大 ,會頂在頭部一會兒, 到頭直接幹掉它的滑動 ViewCompat.stopNestedScroll(target, type); } super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type); } @Override public boolean onTouchEvent(CoordinatorLayout parent, AppBarLayout child, MotionEvent e) { switch (e.getActionMasked()) { case MotionEvent.ACTION_DOWN: break; } return super.onTouchEvent(parent, child, e); }
在佈局中的使用方法如下:
大家可以親自體驗下沒有加自定義的Behavior會出現啥問題,最後放上完整程式碼地址
相關推薦
解決AppBarLayout在華為手機6.0系統快速滑動時抖動問題
最近有個需求要做類似UC、今日頭條標題欄吸附懸停效果,相信大家會用CoordinatorLayout+AppBarLayout來實現,於是加入了專案中,效果是實現了,玩得很愉快,可是玩了一會發現一個原生的bug,問題描述如下: 用手指輕輕滑動CoordinatorLa
【Android開發】app升級報錯,解析包時出現錯誤(華為手機8.0系統)
問題描述: 今天釋出app版本升級,碰到華為手機8.0系統,安裝升級的時候提示,解析包時出現問題。而其他手機都是正常的。而且當我的包沒有經過360加固的時候,也是可以去升級新版本,加固過後就不行了。 這個導致這個問題的原因有很多,我先把我這邊app的問題處理方案介紹給大家
華為手機8.0 應用內安裝APK閃退問題
自動更新功能在安卓6.0 7.0下均沒問題華為安卓8.0手機閃退在網路上找了很多 都沒有解決耽誤了很長時間最後發現解決方法很簡單 只要在Mainfest.xml 中加入許可權編碼即可解決<uses-permissionandroid:name="android.perm
華為手機 Android8.0 使用程式碼安裝APK閃退問題
自己做了個自動更新功能過程是使用程式碼下載完新版本APK自動安裝在安卓6.0 7.0下均沒問題華為安卓8.0手機閃退在網路上找了很多 都沒有解決耽誤了很長時間最後發現解決方法很簡單 只要在Mainfest.xml 中加入許可權編碼即可解決<uses-permission
華為手機7.0以上華為7.0上popwindow位置顯示錯亂,飄
由於測試手機上華為meta8,升級了7.0以後突然popwindows顯示位置往上飄了, 其他機型沒啥問題,一直沒找到原因?後來看到一個連線? 原來是 in showAtLocation failed to no gravity 在7.0上沒有工作 解決
解決華為手機呼叫系統相簿返回值是null的問題
在開發專案中需要呼叫系統相簿,在別的android 手機上能正常的獲取到返回值,但是在華為上卻是返回值為null,下面請看程式碼 Intent imgIntent = new Intent(Inte
Android apk升級 相容6.0 7.0 低版本 華為手機
上篇部落格寫了用DownloadManager,進行下載,結果發現有些手機並不能相容,查詢原因是DownloadManager.Request 的setDestinationInExternalPublicDir()函式問題,這直接根源掛鉤,Request 有個
Android開發之華為手機無法看log日誌解決方法(親測可用華為榮耀6)
華為榮耀的測試機,發現在Android Studio下無法檢視log日誌,看不了日誌就不方便解決問題了。 解決方法: 進入手機撥號介面輸入:*#*#2846579#*#*依次選擇ProjectMenu—後臺設定—-LOG設定—LOG開關 點選開啟, 點LOG級別選V
華為手機模糊拍照解決辦法
拍照模糊 華為拍照模糊 華為手機拍照模糊 華為Mate9、P10等手機拍照模糊、無法對焦的情況,除硬件問題(硬件問題建議去網點檢測,1年保修期內免費維修)、鏡頭汙染、對焦失敗等原因外,還可能是開啟了大光圈模式! 1.華為手機大光圈模式為什麽會導致拍照模糊?大光圈,可以令對焦的主體從雜亂的背景中凸顯
解決華為手機無法輸出Debug級別log的問題
進入 bsp name net 我們 人員 android開發 輸入 識別 近期購入了新款的華為手機榮耀8,手感、性能、顏值都非常好。作為android開發工程師,自然會用到真機進行日常的調試。然而,這部手機並沒有這麽“聽話“!反復嘗試開啟開發者選項中的設置項,依舊無法輸出
解決華為手機圖片選擇無效及產生的open failed: EACCES (Permission denied)錯誤
裏的 provide 圖片選擇 providers 加載 hot storage nts 手機 在華為手機上調起圖片選擇時原來的效果如下 原來的代碼是 Intent intent = new Intent(); intent.setAction(Intent.ACT
華為手機WebView長按不能複製,記一次少見奇葩bug解決之旅
風起 接到反饋,說是之前一個老專案的詳情頁(html)長按不能複製了(華為mate9),uh…不記得需求裡有長按複製功能,不過現在原生webview是支援長按複製的,所以就是個預設需求了,那這個bug是要改的。 拿手邊的華為和小米試了一下,的確不能複製,然後到模擬器上跑了下,uh…長
解決華為手機下方導航欄壓蓋佈局的方法(同時使用AndroidSlidingUpPanel和SlidingMenu出現的問題)
我在使用AndroidSlidingUpPanel開源專案的時候將專案匯入了我的工程中,同時我又使用了SlidingMenu的框架,於是出現了這種問題。 問題的解決:本來單獨使用AndroidSlidingUpPanel框架的時候我調出導航欄佈局也會跟著做相應適
vue2.0 在華為手機等手機自帶瀏覽器開啟白屏的問題
使用vue2.0 開發的單頁面網站, 在華為部分型號(p20也是....),部分安卓手機開啟頁面是空白; 網上的方法是把把es6 轉 為 es5, 當時我使用的 vue-cli , webpack 內建babel,會自動轉碼, 排查這種可能性; 根據理解可能是這些瀏覽器的核心版本比
vue2.0 在華為手機等手機自帶瀏覽器打開白屏的問題
因此 使用 sset 內置 info modules 發現 ron 內容 使用vue2.0 開發的單頁面網站, 在華為部分型號(p20也是....),部分安卓手機打開頁面是空白; 網上的方法是把把es6 轉 為 es5, 當時我使用的 vue-cli , webpack
解決華為手機USB除錯app閃退重啟介面清空log日誌問題
機型:華為mate10手機 開發環境:Android studio 3.0 開發app的時候,出現問題,閃退,去控制檯找錯誤日誌,看log的輸出,結果一秒閃過,什麼都沒有. 網上搜了半天,順便記錄: 進入撥號介面輸入:* #* #2846579#* #
開發中 華為手機無法 直接 進入相簿獲取圖片解決方案
開發中碰到無法直接進入相簿的情況,會彈出選擇介面,而需求是要直接從相簿獲取圖片public void localImage(int code) {Intent intent;if (Build.VERSION.SDK_INT < 19) {intent = new I
Android 6.0系統讀寫檔案出現FileNotFoundException:EACCES (permission denied)解決辦法
先檢查你的AndroidManifest.xml是否已經有讀寫許可權: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-
MAR 27 解決華為手機訪問Google Play:從伺服器檢索資訊時出錯。[DF-DFERH-01]
雖然路由器已經設定了梯子,但是用華為手機訪問Google Play時,還是提示:從伺服器檢索資訊時出錯。[DF-DFERH-01]。 雖然在手機上把梯子設定成全域性模式,連線Google Play後再斷掉梯子連線可以升級應用,但實在是麻煩。 放狗搜了一
華為手機連線androidStudio和列印C程式碼log解決方法
相信有部分程式設計師碰到過華為手機開啟了開發者模式和打開了usb除錯模式後也連線不上androidStudio的問題 ,起初我也對這個簡單的問題折磨過一會,後來找到了原因其實很簡單 就是連上電腦後,開發者模式和usb除錯開啟後,下拉狀態列,在狀態列中有一個”正在