自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Thinking in Android & Compose & HarmonyOS

Victory belongs to the most persevering.

  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 Compose 是如何将数据转换成 UI 的?

Compose 是一个声明式的 UI 框架,提供了很多开箱即用的组件,比如 Text()、Button、Image() 等等,Compose 会经过几个不同的阶段,最终渲染出 UI 界面。

2023-11-28 21:40:41 2402 1

原创 Launcher 背后的魔法:揭开 LoaderTask 的数据加载奥秘

Launcher 被 AMS 拉起后,就进入自己的生命流程,Launcher.java 中的 onCreate 函数被调用,准备开始加载桌面。我们来看看 addCallbacksAndLoad() 在 LauncherModel.java 中实现。在 startLoader() 方法中会创建 LauncherBinder 对象。如果是首次启动情况下,会创建 LoaderTask 对象,然后会执行 LoaderTask.run() 方法,利用之前创建的 LauncherBinder 开始加载桌面。

2024-09-14 14:27:43 707

原创 Launcher 背后的魔法:Gradle 构建与编译全攻略(超详细 + Android 14.0)

AOSP 源码,基于 Android 14.0,Gradle 构建 Launcher3,手把手教学,重构 build.gradle,100% 构建出 Launcher Apk 文件,加速你的定制之路!

2024-09-13 14:11:18 1488

原创 【 OpenHarmony 4.1 Launcher 魔改之路 】-- 桌面布局定制

阅读本篇文章之前,有几个需要说明一下:1. 调试设备:平板,如果你是开发者手机,一样可以加 Log 调试,源码仍然是手机和平板一起分析;2. 文章中的 Log 信息所显示的数值可能跟你的设备不一样,以你调试的数据为准。3. 装个逼:目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用,比如 Launcher 写过非常深入的源码解析类文章,所以此类文章,**仅供大家参考学习,如转载或引用,请标明出处**!

2024-08-31 22:08:59 1074 2

原创 【 OpenHarmony 4.1 Launcher 源码解析 】-- 桌面布局

阅读本篇文章之前,有几个需要说明一下:调试设备:平板,如果你是开发者手机,一样可以加 Log 调试,源码仍然是手机和平板一起分析;文章中的 Log 信息所显示的数值可能跟你的设备不一样,以你调试的数据为准。装个逼:目前好像 OH 社区或者其它开发者还没有针对 OH 的系统应用,比如 Launcher 写过非常深入的源码解析类文章,所以此类文章,仅供大家参考学习,如转载或引用,请标明出处!

2024-08-31 11:29:14 583

原创 【 OpenHarmony 4.1 Launcher 源码解析 】-- 初体验

应用子系统/LauncherLauncher 作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应用,并提供桌面布局设置以及最近任务管理等功能。Launcher 采用扩展的 TS 语言(ArkTS)开发。

2024-08-30 17:16:04 1472

原创 【 OpenHarmony 北向开发随笔 】-- 获取设备系统日期/时间

本模块提供基础的应用国际化能力,包括时间日期格式化、数字格式化、排序等,相关接口在ECMA 402标准中定义。「 I18N 模块 」提供其他非ECMA 402定义的国际化接口,与本模块共同使用可提供完整地国际化支持能力。说明:◾ 本模块首批接口从 API version 6 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。◾ Intl 模块包含国际化能力基础接口(在ECMA 402中定义),包括时间日期格式化、数字格式化、排序等,国际化增强能力请参考「 I18N 模块 」

2024-08-30 14:55:11 842

原创 【 OpenHarmony 北向开发随笔 】-- HDC 常用命令

【代码】【 Openharmony 北向开发随笔】-- 设备常用命令。

2024-08-30 09:34:43 119

原创 深度解析 Compose 的 Modifier 原理 -- ParentDataModifier

📑《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》📑《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》📑《 深入解析 Compose 的 Modifier 原理 - - Modifier.layout()、LayoutModifier 》📑。

2024-01-24 11:18:57 1077 1

原创 深度解析 Compose 的 Modifier 原理 -- PointerInputModifier

其实原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量想办法,找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家完全理解了文章所讲述到的源码理论,那就值了。这篇文章,毕竟它是作为 Modifier 原理解析的第一篇文章,对你了解整个 Modifier 架构还是很有帮助的,或者说它是最基础的一篇文章,如果不熟悉,后面的系列 Modifier 你可能会看的比较费劲…

2024-01-22 10:48:59 1149

原创 【Update】深度解析 Compose 的 Modifier 原理 -- DrawModifier

其实原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量想办法,找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家完全理解了文章所讲述到的源码理论,那就值了。

2024-01-20 15:07:23 1140

原创 解刨「布局修饰符」 -- Modifier.layout()、LayoutModifier

在正式开始分析 LayoutModifier 相关原理之前,建议你先看看【 Compose 是如何将数据转换成 UI 的?】这篇文章,当你了解了 Compose 的“组合”、“布局”、“绘制”的思维模型后,有助于你更透彻的了解 Modifier 的底层设计原理。

2024-01-19 10:50:00 1297

原创 Modifier.composed()、ComposedModifier:幽灵一般,无处不在!

众所周知:原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐杂乱往往大家也不乐意看,所以只能尽量找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家理解清楚原理,那就点个赞呗~😄在正式开始分析这篇文章的主角之前,建议你先看看【深度解析 Compose 的 Modifier 原理 -- Modifier、CombinedModifier】一文!

2024-01-19 10:46:28 895

原创 Modifier、CombinedModifier:想吃透 Modifier,你得先了解我!

众所周知:原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐杂乱往往大家也不乐意看,所以只能尽量找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家理解清楚原理,那就点个赞呗~😄在正式开始分析 Modifier 相关原理之前,建议你先看看 【Compose 是如何将数据转换成 UI 的?】这篇文章,当你了解了 Compose 的“组合”、“布局”、“绘制”的思维模型后,有助于你更透彻的了解 Modifier 的本质!当你想深入了解 Modifier

2024-01-19 10:44:58 1360

原创 手把手教你写 Compose 动画 -- 状态转移型动画 API:animate*AsState()

Jetpack Compose 提供了一系列功能强大且可扩展的 API,可用于在应用界面中轻松实现各种动画效果。这一系列文章会逐个介绍所有的动画 API,通过最直观的 Demo 示例,手把手教你怎么写动画以及带你了解动画背后的原理。📑手把手教你写 Compose 动画 - - 状态转移型动画 API:animate*AsState()📑手把手教你写 Compose 动画 - - 流程定制型动画 API:Animatable()📑。

2024-01-18 09:17:27 923

原创 聊聊 Jetpack Compose 的 “自定义布局” -- Layout()

在之前的【聊聊 Jetpack Compose 原理 – LayoutModifier 和 Modifier.layout】文章中,我们了解了 Modifier.layout() 修饰符的用法,并且探讨了它背后那个 LayoutModifier 的原理。除了修饰符,Compose 还提供了一个叫的 Composable 组件,可以直接在 Composable 函数中调用,方便自定义布局。两者都是自定义布局,有什么区别?

2024-01-17 09:35:10 605

原创 聊聊 Jetpack Compose 的 “自定义布局” -- SubcomposeLayout()

其中布局阶段包含:测量和放置子阶段,思维模型如下:这种思维模型适用于绝大多数 的 Layout 可组合项,但却有一个打破规则的布局不遵循此架构 - -。

2024-01-16 10:17:10 676

原创 一文彻底解析 Compose 的穿透刺客 -- CompositionLocal

是通过组合隐式向下传递数据的工具。这段代码中局部变量name以参数的方式被暴露出来了,这就是 Compose 中的(状态提升)。很明显是不行的!因为name这个局部变量的是限定在范围内的。这样写行吗?肯定是不行的!但我就想这么写,并且希望它可以运行,那么这种行为就意味着name这个局部变量要拥有可以穿出它的,并且穿透进函数的能力!实现,它提供了这种「穿透能力」。

2024-01-15 14:57:00 660

原创 手把手教你写 Compose 动画 -- 组件大小变化 API:animateContentSize

animateContentSize 修饰符可为 Compose 组件大小变化时添加动画效果。还是那句话:探索新技术的最佳方式是尝试它们,我们先构建一个简单场景:

2023-12-15 17:29:32 937

原创 手把手教你写 Compose 动画 -- 更强大的多组件切换动画 API:AnimatedContent

AnimatedContent 用来控制多个组件的入场和出场,同时还能对入场和出场效果做定制,相当于是 AnimatedVisibility 和Crossfade 的结合,AnimatedContent 出入场动画效果的尺寸是渐变的,这个是区别于 Crossfade 的一个点。

2023-12-15 14:59:24 1271

原创 手把手教你写 Compose 动画 -- 简单页面切换动画 API:Crossfade

这段代码非常简单,button 控制 shown 变量值,从而显示不同的 Image。对于两个 Image 组件我们就可以看出是两个布局界面,现在切换是没有任何动画效果的。

2023-12-13 14:20:16 1133

原创 手把手教你写 Compose 动画 -- 显示与消失 API:AnimatedVisibility

老样子,先来一段简单代码示例,然后再慢慢引入 AnimatedVisibility 的用法。这段代码极其简单,一个图片,一个按钮,一个 shown 状态变量控制图片显示与否。从动画效果看确实不行,显示与消失都很粗糙。

2023-12-13 11:57:58 1128

原创 手把手教你写 Compose 动画 -- 过渡动画 API:Transition

updateTransiton 是 Compose 中实现过渡动画的关键 API 。所谓过渡动画,即当依赖的某个状态发生改变时连锁发生的一系列动画效果。updateTransition 允许开发者将多个属性数值绑定到一个状态,当这个状态发生改变时,多个属性同时进行变换。

2023-12-12 16:53:18 1534

原创 手把手教你写 Compose 动画 -- 讲的不能再细的 AnimationSpec 动画规范

千呼万唤始出来!前面我们讲解【 animate*AsState 】和【 Animatable 】两种动画 API 的用法时,都提到了它们的函数内部有一个共同的核心参数:AnimationSpec。

2023-12-08 14:01:24 1578

原创 手把手教你写 Compose 动画 -- 流程定制型动画 API:Animatable()

Jetpack Compose 提供了一系列功能强大且可扩展的 API,可用于在应用界面中轻松实现各种动画效果。从这篇文章开始,会逐个介绍所有的动画 API,通过最直观的 Demo 示例,手把手教你怎么写动画以及带你了解动画背后的原理。

2023-12-07 14:43:02 1027

原创 一文彻底吃透 Compose 中的副作用(附带效应)

Jetpack Compose 提供了多个可组合函数,例如 SideEffect、LaunchedEffect 和 DisposableEffect,这些函数使开发人员能够有效地管理副作用,方法是将它们与界面渲染逻辑分离并在单独的协程范围内执行它们。

2023-12-06 10:23:32 1148 2

原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- 你真的了解重组吗?

通过之前的几篇文章,你应该对这三行代码不陌生,当用 mutableState*Of 申明一个变量的时候,在可组合项中,如果变量变化了,就会触发重组。

2023-12-05 11:55:59 346

原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- mutableStateListOf

对于 String、Int 这些类型,Compose 提供了 mutableStateOf,难道对于 List 这种这么常用的类型,就没有一个 mutable*** 的函数给我们用?

2023-12-04 19:49:19 676

原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- 有状态、无状态、状态提升?

使用 remember 存储对象的可组合项包含内部状态,这会使该可组合项有状态。在调用方不需要控制状态,并且不必自行管理状态便可使用状态的情况下,“有状态”会非常有用。

2023-12-04 17:15:01 275

原创 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” -- remember 和重组作用域

在讲本篇文章主题之前,建议先看看【聊聊 Jetpack Compose 原理 -- 状态订阅&自动刷新机制】一文,因为两篇文章是上下篇的关系,看完上篇,可以更好的串联知识点。话不多说,还是老样子,从 Demo 一步步引出我们的核心知识点。

2023-12-01 10:19:44 1186 1

原创 解析 mutableStateOf 源码 -- 扒皮 Compose 的状态订阅&自动刷新机制

其实原理性分析的文章,真的很难讲的通俗易懂,讲的简单了就没必要写了,讲的繁琐难懂往往大家也不乐意看,所以只能尽量想办法,找个好的角度(比如从 Demo 代码示例出发)慢慢带着大家去钻源码,如果确实能帮助到大家完全理解了文章所讲述到的源码理论,那就值了。

2023-11-30 15:54:21 759 3

原创 写给初学者的 HarmonyOS 教程 -- 状态管理(@State/@Prop/@Link 装饰器)

@State 装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI 会发生对应的渲染改变(类似 Compose 的@Prop 装饰的变量可以和父组件建立单向的同步关系。@Prop 装饰的变量是可变的,但是变化不会同步回其父组件。

2023-11-28 15:03:23 2324 2

原创 写给初学者的 HarmonyOS 教程 -- 页面路由(router)

页面跳转是开发过程中的一个重要组成部分。在使用应用程序时,通常需要在不同的页面之间跳转,有时还需要将数据从一个页面传递到另一个页面(类似 Activity 跳转)。。HarmonyOS 提供了Router 模块,通过不同的url 地址,可以方便地进行页面路由,轻松地访问不同的页面。

2023-11-27 23:13:21 1418

原创 写给初学者的 HarmonyOS 教程 -- 循环渲染(ForEach)

ForEach 接口基于数组类型数据来进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在 ForEach 父容器组件中的子组件。例如,ListItem 组件要求 ForEach 的父容器组件必须为 List 组件。

2023-11-27 18:32:42 2530

原创 写给初学者的 HarmonyOS 教程 -- 自定义组件的生命周期

自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。

2023-11-27 15:37:36 424

原创 写给初学者的 HarmonyOS 教程 -- ArkTS 容器组件(List)

使用列表可以轻松高效地显示结构化、可滚动的信息。通过在 List 组件中按垂直或者水平方向线性排列子组件 ListItemGroup 或 ListItem,为列表中的行或列提供单个视图,或使用ForEach 迭代一组行或列,或混合任意数量的单个视图和 ForEach 结构,构建一个列表。

2023-11-27 10:19:49 5302 1

原创 写给初学者的 HarmonyOS 教程 -- 什么是 ArkTS ?

Harmony 应用开发所使用的语言为:ArkTs。它在 TypeScript 的基础上拓展了声明式 UI、状态管理等相应能力,让开发者已更简洁自然的方式开发高性能应用。ArkTs 是 TypeScript 的拓展,提供了一套声明式 UI 描述规范,帮助你以更接近自然语义的方式直接的描述 UI 界面。

2023-11-25 14:41:47 915

原创 写给初学者的 HarmonyOS 教程 -- 熟悉 DevEco Studio

要进行 HarmonyOS 开发,必须要切换开发工具了,菊花厂基于 IntelliJ IDEA Community 开源版本打造新打造了一个面向华为终端全场景多设备的一站式集成开发环境(IDE):DevEco Studio。

2023-11-25 10:02:48 3343

原创 写给初学者的 HarmonyOS 教程 -- TypeScript 快速入门

ArkTS 是 HarmonyOS 优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配 ArkUI 框架,扩展了声明式 UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。

2023-11-24 23:58:53 1029

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除