安卓学习笔记
文章平均质量分 85
zhaoqinmuxue
人无我有,人有我不做
展开
-
安卓事件分发机制详解
安卓的事件分发机制非常绕脑,很容易一知半解。其中涉及到四个关键概念,前三个是方法,它们什么时候被调用,返回值起什么作用各不相同,最后一个是一个引用变量,它何时为null何时不为null决定了方法的调用。dispatchTouchEvent onInterceptTouchEvent onTouchEvent mFirstTouchTargetmFirstTouchTarget什么时候不为null当当前ViewGroup的onInterceptTouchEvent不拦截DOWN事件,即on原创 2020-09-11 17:18:53 · 293 阅读 · 0 评论 -
深入分析RecyclerView源码——ItemTouchHelper
ItemTouchHelper是官方提供的增强RecyclerView的方案,提供侧滑删除和拖动位置的功能,使用上不算特别简单,需要自己实现Callback回调接口。本文略过使用方法主要从整体流程上分析ItemTouchHelper的实现原理。流程概述ItemTouchHelper是通过先行拦截RecyclerView的MotionEvent实现的,ItemTouchHelper先判断是否...原创 2019-12-13 15:29:54 · 264 阅读 · 0 评论 -
深入分析RecyclerView源码——缓存策略
计算机领域常用的提高效率办法是使用缓存,一级不够就上多级缓存,RecyclerView也采用了缓存策略。缓存的单位是ViewHolder,具体实现是Recycler类,Recycler有五个缓存池用来存放暂时用不到的ViewHolder,下一次使用时会在缓存池中寻找,找不到时才会调用Adapter的onCreateViewHolder创建ViewHolder。加上ChildHelper的mHidd...原创 2019-12-10 20:41:51 · 336 阅读 · 0 评论 -
深入分析RecyclerView源码——滑动机制
RecyclerView布局之外,最常用的功能应该就是滑动。RecyclerView的事件处理依然是常规的onTouchEvent根据触控事件响应,特别的是RecyclerView采用了嵌套滑动机制,会把滑动事件通知给支持嵌套滑动的父view先做决定,以实现诸如toolBar上划隐藏的效果,还有就是涉及到缓存策略,不过相比布局,滑动的缓存策略要简单的多,仅仅是把划出屏幕的viewHolder存入m...原创 2019-12-10 11:09:01 · 489 阅读 · 0 评论 -
深入分析RecyclerView源码——布局流程(下)
接着上篇继续分析布局流程。onLayoutChildren所取onLayoutChildren是LinearLayoutManager的方法,RecyclerView把具体的布局交给了布局管理器去做,精简后的代码主要做了三件事:一、确定锚点(updateAnchorInfoForLayout),所谓锚点就是布局的基准点,一般情况下layout子view是从上到下或者从下到上的,但是当子...原创 2019-12-08 19:55:05 · 531 阅读 · 0 评论 -
深入分析RecyclerView源码——布局流程(上)
开篇简述RecyclerView的源码数量真的是太多啦,第一次解析打算按照分析view的标准方法,先从measure、layout和draw三大流程入手。本篇文章主要着眼于最核心的measure和layout过程。分析后会发现RecyclerView实际上是把两个过程分由三个函数dispatchLayoutStep1,dispatchLayoutStep2和dispatchLayoutStep...原创 2019-11-23 14:42:55 · 435 阅读 · 0 评论 -
安卓子线程更新UI不闪退的问题
子线程不能更新UI已经是一个常识了,如果两个线程同时更新UI,可能对同一个控件操作造成混乱,而更新UI涉及到整棵View树的遍历,加锁又影响效率,索性在ViewRootIlmpl类中设置一个checkThread()方法,检测当前线程和创建View的线程是否是同一个,如果不是直接Throw Exception,这就是不能在子线程更新UI的原理。但是实测发现在某些情况下可以在子线程中更新UI。一...原创 2019-09-16 21:39:44 · 640 阅读 · 0 评论 -
详解安卓MeasureSpec及其和match_parent、wrap_content的关系
在安卓View的measure过程中,measureSpec扮演着重要的作用。MeasureSpec是一个32位的int,前2位代表模式,其中00代表UNSPECIFIED,01代表EXACTLY,10代表ATMOST,后30位代表具体大小,例如1073741824模式为EXACTLY,大小为1080。这三种模式的具体意思如下图在ViewGroup中有一个getChildMeasureSp...原创 2019-09-08 18:30:17 · 1372 阅读 · 3 评论 -
为什么安卓Parcelable接口会有一个内部类Creator
Parcelable接口是实现序列化的一种方式,与Serializable相比比较复杂,但胜在运行效率高,在安卓中得到了广泛应用。主要需要实现写入和读出两个功能,写入比较易懂,使用writeToParcel,读出按说也应该是一个方法createFromParcel,但是却将其封装在了Creator类中,这是何故?深入Parcel类的readParcelable方法初步了解读出过程才恍然大悟。...原创 2019-08-30 21:04:51 · 1302 阅读 · 0 评论 -
简单易懂ppi和dpi的本质和由来
今天学习安卓的时候又遇到这个问题,第一次认真搜索了一下,看了很多博文说的不太全面或是没有讲到本质,我只是简单说一下对于电子屏幕来说ppi和dpi的区别。一、PPI和DPI的概念 先说普通用户接触较多的ppi,英文全称pixels per inch,又叫像素密度,意思是每英寸上的像素数。如图是我画的垃圾图,凑活看,一块1280*720分辨率的5英寸屏幕,意思是横向...原创 2019-03-08 16:14:16 · 2899 阅读 · 0 评论