猫侠的小窝

一步一步,盖个大房子……

Android动画

Drawable动画、View动画、属性动画,以及由属性动画封装出的Transition、Content Trasition、Shared Element Transition

三种基本动画 Drawable Animation:指定每一帧的图片和播放时间,有序的进行播放而形成动画效果。 View Animation:当View回溯到DecorView被标记为PFLAG_INVALIDATED,以致其将被重绘时,在View.draw()中,将动画某一帧的计算结果赋值给RenderNode/Canvas,从而改变绘制结果,连贯起来就形成了动画。 Prop...

View触摸

控件树对触摸事件的分发

MotionEvent MotionEvent核心是一个32位的int值。每8位表示一种信息。从低位到高位依次是:事件类型 -> 触摸点索引 -> 触摸点绝对坐标X -> 触摸点绝对坐标Y。 mNativePtr:保存Native层MotionEvent对象的地址。 getAction():获取 ...

自定义View

自定义View的常用技巧

获取View的准确尺寸位置 onMeasure():可能在自测量阶段被调用,此时获取到的measuredWidth/measuredHeight是自测量尺寸;也可能在再测量阶段被调用,此时获取到的是准确尺寸。 onLayout()及之后:获取到的measuredWidth/measuredHeight或getWidth()都是准确尺寸。 getMeasuredWidth()、g...

实现列表

ListView与RecyclerView的原理与应用

ListView ItemView的性质 ViewType ListHeader和ListFooter为-2; 不进行复用的标记为-1; 其余 >= 0。 TransientState 如果1个ItemView正在执行动画,或者记录了用户的某个操作,那么可以调用View.setTransientState(true)把它标记为”是持有瞬时状态的”,那么它将不被复用。 ...

View绘制

控件树的创建、测量、布局、绘制、销毁

重要的类 PhoneWindow:自定义内容与DecorView、WMS之间的桥梁。 Callback/OnWindowDismissedCallback:WMS回调。 mWindowManager(WindowManagerImpl):向WMS发送信息的装饰层对象。 mDecor(DecorView):控件树的根节点。 mContentRoot(ViewGroup):...

实现对话框

共有Activity、Dialog、DialogFragment、PoppupWindow四种方式

四种方式 区别 Activity、Dialog的type都是TYPE_APPLICATION,PopupWindow是TYPE_APPLICATION_PANEL; Activity、Dialog中封装了PhoneWindow对象,PopupWindow没有;因此PopupWindow默认不获取焦点、不响应输入事件、不独占触摸事件、显示时不添加DimLayer。 创建Activ...

控制窗口

WMS提供了哪些接口供应用程序控制窗口属性?

重要的FLAG 焦点、触摸、输入事件类 FLAG_NOT_FOCUSABLE:设置后输入事件会略过这个窗口,传递到下个窗口;窗口范围内的触摸事件失效,范围外的会传递到下个窗口;这个窗口会置于软键盘之上,如果又设置FLAG_ALT_FOCUSABLE_IM则不会。 FLAG_NOT_TOUCH_MODAL:设置后,在窗口范围外的触摸事件会传递到下个窗口,如果还设置了FLAG_WATC...

WindowManagerService

WindowManagerService

简介 WMS运行于SystemServer进程的DisplayThread线程。DisplayThread线程由DMS创建,其中运行了DMS、WMS、IMS。WMS负责所有窗口的排序和布局、创建和销毁Native层Surface、把触摸事件分发给焦点窗口、锁屏。 这篇仅记录管理窗口部分。 重要的类 WindowState:在WMS中代表一个窗口;封装了窗口通信服务端、客户端;封装了...

PackageManagerService

PackageManagerService

简介 PMS运行于SystemServer进程。负责应用安装,管理所有已安装应用的组件信息。 启动后的准备工作 在PackageManagerService构造函数中: 构建DisplayMetrics; 构建Settings; 向Setting添加“system”、“phone”、“log”、“nfc”进程的SharedUserSetting; 由WMS向Displa...

ContentProvider组件

ContentProvider组件

ContentProvider的作用是暴露某应用的数据,提供增删查改这些数据的接口,并在过程中有权限校验等。所有ContentProvider都由AMS管理,但是增删查改的实际处理逻辑是运行在ContentProvider所属进程中的。 ContentResolver的作用是根据Uri查找匹配的ContentProvider,获取一个Cursor对象,用它操作这个ContentProvid...