这章来讲一个重大的问题,解决卡顿,我不敢保证我的方法是最优而且对所以都管用,但是至少会比之前的滑动顺畅。

如果你用我Android CoordinatorLayout(三)中写的demo,你会发现一个问题,滑动会有卡顿,关键是,你如果一直用手指触碰屏幕滑动的话不会感觉什么。而卡顿是在产生惯性的时候。我们都知道现在的android滑动组件很牛逼,都有惯性的效果,你比如说RecyclerView,你滑动一定速度之后你放开手,它还会以减速的方式滑动一段距离。而这个demo不顺畅的地方就是在放开手之后的惯性上。别人也有遇到过这个问题:

image.png

那怎么办,我也不知道啊,我又看不懂源码,我也不知道怎么去解决这种卡顿,只能跟着大屌走了,去stackoverflow中看看大屌们都是怎么处理的。

三、解决CoordinatorLayout滑动卡顿

1. 大屌推荐之自定义Behavior 方法

public final class FlingBehavior extends AppBarLayout.Behavior {

private static final int TOP_CHILD_FLING_THRESHOLD = 3;

private boolean isPositive;

public FlingBehavior() {

}

public FlingBehavior(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {

if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) {

velocityY = velocityY * -1;

}

if (target instanceof RecyclerView && velocityY < 0) {

final RecyclerView recyclerView = (RecyclerView) target;

final View firstChild = recyclerView.getChildAt(0);

final int childAdapterPosition = recyclerView.getChildAdapterPosition(firstChild);

consumed = childAdapterPosition > TOP_CHILD_FLING_THRESHOLD;

}

return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);

}

@Override

public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {

super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);

isPositive = dy > 0;

}

}

android:id="@+id/appbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

app:layout_behavior="com.example.kylinarm.coordinatorlayouttest.FlingBehavior"

>

你会发现这样做能解决卡顿,但是不是很好,为什么这样说呢?

(1)我想到了一个很形象的句子来形容这样做的结果,在AppBarLayout加上这句话之后,RecyclerView滑动从原来的摩擦力很大(所以卡顿)变成了摩擦力超小(顺畅过头),什么是顺畅过头,你可以试一下,就像你嚼了炫迈一样,根本停不下来。

(2)对NestedScrollView没有,在NestedScrollView的Fragment滑动时,还是会卡顿。

2. 26版本已经解决这个BUG

瞎扯淡,我升级到26还是不行,还是卡如狗。

我找了很久,还是没能找到合适的方法解决 这个BUG,虽然有缺陷,但是第一个解决方法还是勉强能用,但是对NestedScrollView没有用,那就不用NestedScrollView吧,直接用recyclerView写一个Item然后用viewmodel也能实现NestedScrollView的效果。这样做下来唯一的不足就只剩我前面说的摩擦力太小了。还有一个问题是有时候会产生跳屏。

兄弟们,我已经尽力了,我尝试了一个小时都没办法解决,onNestedFling内的代码我也不是很看得懂,所以没办法着手改造。我用过一些软件,里面的折叠效果是正常的,但是和CoordinatorLayout的效果有些不一样,所以我估计也许别人不是用CoordinatorLayout,或者如果有解决办法的请回复一下,谢谢。如果实在没有办法,我建议不要用这个控件,就算使用,那也要用在折叠范围很小,比如200dp内的viewgroup之类的,这样bug效果不是很明显,而像我之前的viewgroup高度占了屏幕的四分之三,这样bug太影响用户体验了。所以如果你折叠的布局高度很高,不建议在不解决这个BUG的情况下去使用这个控件。

android 触摸 卡顿,Android CoordinatorLayout(五) 严重的卡顿BUG相关推荐

  1. Android sim卡清空,Android手机卡了?用这几种方法变回来...

    原标题:Android手机卡了?用这几种方法变回来... 2017年已经过去了三个多月,各大手机厂商也纷纷亮出了自家的新年新品,单看内存,几乎已经全面升级到4GB以上,6GB内存也成为中高端手机的标配 ...

  2. android 触摸事件 控制,Android笔记:触摸事件的分析与总结----TouchEvent处理机制

    其他相关博文: Android中的事件类型分为按键事件和屏幕触摸事件.TouchEvent是屏幕触摸事件的基础事件,要深入了解屏幕触摸事件的处理机制,就必须掌握TouchEvent在整个触摸事件中的转 ...

  3. android触摸事件分发,Android 事件分发机制

    Android 事件分发机制一直让人头痛,之前也是面向 GitHub 编程得过且过.今天下定决心了解一下,以便后面自己定制 View 效果.Android 触摸事件有三个基本类型:ACTION_DOW ...

  4. android sd卡写入,Android写入SD卡文件夹

    Android写入SD卡文件夹 我正在使用以下代码从我的服务器下载一个文件,然后将其写入SD卡的根目录,所有这些都很好:package com.downloader;import java.io.Fi ...

  5. android触摸进度条,Android仿IOS ViewPager滑动进度条

    最近做项目,碰到如下的需求:ViewPager分页,如果是6页(包括6页)就用圆点,如果是6页以上就用进度条来切换.前面一种交互方法最常见,用小圆点来表示当前选中的页面,这些小圆点称为导航点,很多Ap ...

  6. android sim卡命令,Android常用命令

    一.查看当前显示的Activity linux: adb shell dumpsys activity | grep "mFocusedActivity" windows: adb ...

  7. android sim卡分析,Android 判断SIM卡属于哪个移动运营商详解及实例

    Android 判断SIM卡属于哪个移动运营商 第一种方法: 获取手机的IMSI码,并判断是中国移动\中国联通\中国电信 TelephonyManager telManager = (Telephon ...

  8. android sd卡名称,Android系统中SD卡各文件夹名称及功能详解

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1..android_secure 是官方app2sd的产物,存储了相关的软件使用认证验证,删了之后装到sd卡中的软件就无法使用了,小心别误删. 2..B ...

  9. android 触摸 唤醒屏幕,Android中屏幕保持唤醒

    1.锁的类型 PowerManager中各种锁的类型对CPU .屏幕.键盘的影响: PARTIAL_WAKE_LOCK : 保持CPU 运转,屏幕和键盘灯有可能是关闭的. SCREEN_DIM_WAK ...

最新文章

  1. Hibernate 实体映射类的状态值自动转换
  2. 8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04
  3. 【机器学习】用摸鱼学来解释隐马尔可夫模型(HMM)
  4. 每天一道LeetCode-----计算一个直方图空隙的容量(如果装水能装多少)
  5. 2019.5.8_此书真乃宝书也_从定位参数到仅限关键字参数
  6. $JavaScript(3)
  7. python3.3 连接mysql_python3.3连接mysql数据库
  8. 内存映射文件mmap原理分析
  9. PostgreSQL中的pg_hba.conf
  10. 栈操作与栈帧 (转)
  11. php中对数组进行转码,php实现转码的方式(支持数组类型转码)
  12. matlab符号函数作图,matlab符号函数的作图
  13. 深度学习优化算法:AdaDelta算法
  14. 微信小程序-001-抽签功能-000-目录概要
  15. NodeJs+mongoose实现搜索功能
  16. HDOJ 2492 Ping pong 线段树+离散化
  17. smart显示无服务器,RAKsmart美国服务器常见的问题和解决
  18. EAX、ECX、EDX、EBX等寄存器的作用
  19. 具名元组namedtuple
  20. JavaScript的学习8——underscore

热门文章

  1. 如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题
  2. 解决intellij idea中使用live edit插件不能在chrome即时显示css变化的方法(html可以)
  3. 关于vue+element-ui项目的分页,返回默认显示第一页的问题解决
  4. 测试类异常Manual close is not allowed over a Spring managed SqlSession
  5. 解决 maven 项目中加入了 lombok 库后依然报错的问题
  6. Joda-Time中两个日期之间的天数
  7. 表格内部的文本对齐类
  8. 如果我有jQuery背景,那么“ AngularJS中的思考”吗? [关闭]
  9. java多线程之API初探(一)
  10. PhpStorm+Homestead+Xdebug调试Laravel