总结:如果能满足需求,尽量使用 animate*AsState()。若需要控制起始值则使用 Animatable。状态切换动画Android View 体系中,动画几乎默认就是属性动画了。同学们对它的原理应该不陌生,无非是高频地连续地修改 View 属性从而达到动画的效果。Compose 中组件自己不再有状态,但状态没有消失,通常以 MutableState 的方式存储在某个地方,对状态的修...
总结:如果能满足需求,尽量使用 animate*AsState()。若需要控制起始值则使用 Animatable。状态切换动画Android View 体系中,动画几乎默认就是属性动画了。同学们对它的原理应该不陌生,无非是高频地连续地修改 View 属性从而达到动画的效果。Compose 中组件自己不再有状态,但状态没有消失,通常以 MutableState 的方式存储在某个地方,对状态的修...
这篇就是总结一下不同数据类、不同 UI 框架下生命周期的处理问题。生命周期传统生命周期Android 生命周期是老生常谈的话题了。回想 7 年前梦开始的时候,Android 的生命周期还高度依赖 Activity / Fragment 的回调。那时的代码丑陋不堪,一不注意就会漏写哪一部分。后来 Android 官方推出了 lifecycle 库集中处理这些东西。个人认为 lifecycle ...
SideEffect 官方翻译成「副作用」或「附带效应」。首先应该明确的是,副作用只是除了目标效果之外,附带的效果,不见得是不好的。不要把副作用和坏作用混为一谈。大概官方翻译成「附带效应」也是这个用意吧。在编程上副作用普遍指,一个函数修改了外部状态(比如修改全局变量或打印输出)。更加精准的定义是:如果把一个函数删掉,用它的返回值替代过来,是否影响逻辑?对于没有返回值的函数更简单:能不能直接把...
嵌入显示Viwe 中嵌入 Compose乍一看这活挺复杂的,其实很简单。首先在传统 View 里加一个 ComposeView 作为 Compose 的容器:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.a...
⚠️ 警告:这一节非常硬核,我花了三天学习,所以不建议尝试短时间看完并理解。本节源码参照 Compose 1.3.0-alpha02回顾虽然还没有系统地学习过,对 Modifier 我们也不陌生,它用来给组件设置各种属性与监听。对于 Modifier 和直接传参也做过简要的总结:前者多用于通用属性,后者多用于特有属性。多个 Modifer 有先后关系,典型例子是 Modifier.paddi...
从某种角度来说,Compose 组件是无状态的。这很好理解 —— Compose 的那些组件函数甚至都不会返回一个对象,哪有状态可言?对于传统 View,比如 TextView,可以通过 TextView.getText() 来获取其内部状态,当然,还有很多其他属性。那么 Compose 中又如何实现?答案就是 状态提升 (State Hoisting)。听起来很高大上,实际上很粗暴。所谓「...
对于 Compose 中的数据,用 mutableStateOf() 包裹来实现监听刷新我们已经轻车熟路。那如果一个数据依赖于另一个或多个数据怎么办?这就用到 derivedStateOf(),它专门用于数据的转换,当上游数据发生变化时会自动刷新下游数据,进一步刷新 UI。有点类似 LiveData 中 Transformations.switchMap 的作用。Show me the co...
第一节.md" >}})就讲到,Compose 过程第一步是「组合」,当变量发生改变时,可能触发「重组」。所谓重组,就是要重新执行我们写的 Compose 代码,为此 Compose 对代码进行了包装。同时为了优化性能,包装一般是比较细粒度的。这是否意味着可以高枕无忧了呢?看下面的代码:var msg = Message("hello") setContent { ...