常规&高级UI编程笔记| 青训营笔记

131 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第4天
由于此前已经接触过简单的UI编程与自定义view,此笔记多整理用于自我记录的零碎知识点,包括事件分发,生命周期等。

文中截图来源于字节跳动夏令营讲座课件,若有侵权请联系删除,感激不尽

先放两张生命周期图,不是本节内容不过放在一起也无碍

V06T[2]~49ICX2XD6DVSDOM.png

ZYB2~8``EF@GQICSK8{7Z(F.png

控件位置属性 NY%CBT8NEA)%WGX_4UR3~3T.png

LinearLayout中有个divider的属性为分割线,这个没去了解过但以后可能用到。之前学cameraX的时候记得官方demo有一个工具叫guideline,不知道有什么区别。

framelayout有一个属性叫foreground,和foregroundGravity,为设置前景图像(永远在最上层不会被覆盖的图片)(设置多个前景图像会怎么样还不知道)

注意到Activity在onResume被绘制而不是onCreate

关于findviewbyid源码,底层逻辑其实是交由viewgroup覆写一个简单函数:如果寻找的id等于自己的id,则返回自己,不然返回null。viewgroup对自己的view自己遍历便实现功能。

触摸事件MotionEvent中除了常见的ACTION_DOWN/UP/MOVE,对于多点触控情况下,除第一个点以外的触摸事件会触发ACTION_POINTER_DOWN/UP(UP为最后一个离开的点)。

前文提到的触摸事件分发,首先有下图的属性表,关于什么控件有什么属性。然后关于事件的分发流程,截图太模糊就不放上来了,网上搜得到的。
pic3.png
简单来说就是从Activity到ViewGroup到View从上而下以此询问是否有人处理,若无处理再V字形向上返回。

重头戏动画
动画有三种,帧动画,补间动画,属性动画。
帧动画可以简单类比为GIF图片,仅可以用于View控件。简单,但单一,容易OOM。实现方式自查。

补间动画
通过开始状态与结束状态,中间状态由系统差值器自动生成。和帧动画一样不能修改View属性。同样简单,适合作为转场动画。实现方法自查。
两种动画小结如下。注意到两种方式View属性都不会发生变化。 pic4.png

属性动画
对象为任意Java对象。动画效果丰富(不止组间动画的四种)
实现逻辑可简单理解为多个组间动画(仅表示由差值器计算回调的过程)的组合,改变View属性。

自定义View 扔物线永远滴神。你想要的一切基本都在这里。 自定义 View - 扔物线 (rengwuxian.com)