![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Compose
文章平均质量分 94
Jetpack Compose
VincentWei95
这个作者很懒,什么都没留下…
展开
-
Compose:自定义触摸反馈
Toast.makeText(this, "发生事件: customClick", Toast.LENGTH_SHORT).show()})onClick()在 Compose 触摸事件类型主要有三种:PointerEventType.Press:按下事件,对应的 MotionEvent.ACTION_DOWN,多指的 MotionEvent.ACTION_POINTER_DOWN 也是返回它。原创 2023-09-29 16:35:24 · 537 阅读 · 0 评论 -
Compose:状态更新
我们先上一段代码,你觉得下面代码最终执行结果是什么:Text() 最终显示的结果还是 name,并没有在 3s 后更新为设置的值。为什么会这样呢?实际上上面的代码经过编译器编译后,代码类似是这样的:被通知刷新的 Text(name) 会被处理为例如被一个 WrapperFunction 包裹起来标记,在后续 name 更新的时候就会执行 WrapperFunction 代码块中的代码;因为 name 也被包裹在 WrapperFunction,所以 name 已经不是原先的那个 name,而是一个新的原创 2023-07-02 16:13:13 · 618 阅读 · 0 评论 -
Compose:自定义布局
当我们讲到原生的自定义布局,一般是指的自己实现一个 View 或者 ViewGroup 的子类,可能会重写 onMeasure() 和 onLayout() 达到我们想要的效果。但是在 Compose 所有的组件都是用纯 kotlin 代码,在定义自定义布局时,如果是单纯的摆放 Composable,可以认为是不算的:Compose 能通过 LayoutModifier 定制一个组件的测量布局效果:如果要自定义可以管控子组件的 Composable,Compose 提供了一个 Layout() 的 Co原创 2023-05-03 17:52:57 · 292 阅读 · 2 评论 -
Compose:自定义绘制
Compose 的绘制底层其实还是使用的 Canvas,不过相比原生的自定义绘制,Compose 提供了更上层的 API,这套 API 能让我们更简单更直接实现和原生一样的效果。并对其进行了详细的分析,所有的绘制步骤包括组件自身的绘制、手写的自定义绘制都是在 DrawModifier。我们可以用 DrawModifier 实现不同的绘制顺序。上面是一个文本,然后使用 Modifier.drawBehind() 绘制黄色的背景。可以发现使用 Compose 绘制和原生不同的是,原创 2023-04-29 13:12:02 · 210 阅读 · 0 评论 -
Compose:附带效应 SideEffect 和 Compose 中的协程
DisposableEffect 的使用场景比如界面埋点,还有设置进入界面时加上全局监听,退出界面时移除全局监听等等,具体还是看业务场景。SideEffect 从字面意思就是附带效应的意思,这里的附带效应指的是额外的作用。再具体到 Compose,,就是 SideEffect 的加强版。在 Compose 中。原创 2023-03-19 15:05:44 · 398 阅读 · 0 评论 -
Compose:其他的 Modifier
OnRemeasuredModifier 和 OnPlacedModifier 分别对应的 onMeasure() 和 onLayout() 测量布局过程,也就是说它们是分开的,先执行测量然后再有布局,在 OnPlacedModifier 虽然也能拿到测量结果,但 OnRemeasuredModifier 会比 OnPlacedModifier 先回调测量结果。可以看到在 talkback 模式下文本也是可以被点击响应到,此时点击方块是没反应的,因为在无障碍场景点击它没有意义。原创 2023-03-15 23:29:40 · 187 阅读 · 0 评论 -
Compose:ParentDataModifier
ParentDataModifier 的底层存储方式和 DrawModifier 以及 PointerInputModifier 相同,都是存储在链表中,整个链表在指定的数组索引位置:因为 Compose 是一个纯 UI 的框架,无论是 DrawModifier、PointerInputModifier 两者之间都没有关联,同理 ParentDataModifier,不过 ParentDataModifier 是和测量布局有一点关联用于辅助的 Modifier。我们在 LinearLayout 设置某个控原创 2023-03-15 23:29:51 · 48 阅读 · 0 评论 -
Compose:PointerInputModifier
PointerInputModifier 是用来做触摸反馈的 Modifier,但实际上命名为 PointerInput 比 Touch 更合适,因为 PointerInput 还代指包含鼠标等输入反馈处理,只是在 Android 基本都是触摸事件。在讲 PointerInputModifier 之前,我们先了解下 Compose 的点击要怎么处理。原创 2023-03-15 23:26:46 · 334 阅读 · 0 评论 -
Compose:DrawModifier
这次 Modifier.drawWithContent() 后面有一个 background() 的 DrawModifier,background() 是 Modifier.drawWithContent() 原有的内部内容,在调用 Modifier.drawWithContent() 但没有填写任何内容,这将会擦除 background()。,如果是添加了 Modifier.background(),那么就是调用 background() 这个 DrawModifier 的 draw() 绘制自身。原创 2023-03-15 23:26:54 · 85 阅读 · 0 评论 -
Compose:LayoutModifier
虽然提到测量和布局分别在 remeasure() 和 replace() 分别处理,按上面的源码分析,原创 2023-03-15 23:23:18 · 140 阅读 · 0 评论 -
Compose:Modifier、CombinedModifier 和 ComposedModifier
Compose Modifier原创 2022-11-05 15:51:04 · 183 阅读 · 0 评论 -
Compose:动画
Compose原创 2022-07-30 23:27:30 · 347 阅读 · 0 评论 -
Compose:State 状态订阅更新原理
compose原创 2022-07-13 16:14:55 · 538 阅读 · 0 评论 -
Compose:自定义 Composable
为什么要加 @Composable 注解才能用 Compose 的控件?在编译过程中这些组件会被 Compose 的编译器插件(Compiler Plugin)添加修改一些参数,调用的时候也是使用被修改参数后的函数。添加的参数准确的说是一个叫 Composer 类型的参数,加上它主要是有用到,而且通过注解的方式在编译时就加上,开发者也能很方便不用手动加上。这种方式就是典型的面向切面编程(AOP)。在我们熟知的 AOP 方案主要有两种:Annotation Processor 注解处理器修改字节码比如 ASM原创 2022-06-11 15:43:28 · 201 阅读 · 0 评论 -
Compose:Compose 写一个简单界面
文章目录声明式 UI从文字和图片到独立于平台的含义和未来传统 Layout 的 Compose 平替Modifier 两个特点:从内外边距说起从按钮到 MD:Compose 为啥这么分包?声明式 UI目前 Android 传统的 UI 界面编写流程是这样的:先在 xml 编写静态界面,然后在 Java 或 Kotlin 代码写业务逻辑时需要更新界面则手动更新 UI。这种写法叫做命令式 UI:<LinearLayout xmlns:android="http://schemas.android.c原创 2022-06-04 16:41:13 · 399 阅读 · 0 评论