- 博客(486)
- 收藏
- 关注
原创 被裁员后,踏上了鸿蒙开发求职之路
半年前,我遭遇了人生中的一次重大挫折——被公司裁员。作为一名前端开发人员,这个消息如同晴天霹雳,让我陷入了深深的迷茫和焦虑之中。
2024-09-22 22:13:06
774
原创 鸿蒙(HarmonyOS)北向开发知识点记录~
北向开发的目标是为鸿蒙生态系统构建丰富多样的应用程序,满足用户在不同场景下的需求。通过北向开发,开发者可以充分利用鸿蒙操作系统的独特优势和强大功能,为用户带来全新的体验,同时也为自身创造更多的商业机会和价值。
2024-09-04 22:07:24
3279
原创 HarmonyOS 实战开发 —— 基于Drawing的图形/文字绘制及双缓冲模拟实现刷新
支撑用户设置排版风格和文本风格,可调用OH_Drawing_TypographyHandlerAddText添加文本并调用OH_Drawing_TypographyLayout和OH_Drawing_TypographyPaint对文本进行排版和绘制。支撑具备自排版能力的用户将排版结果构造为OH_Drawing_TextBlob并调用OH_Drawing_CanvasDrawTextBlob绘制OH_Drawing_TextBlob描述的文本块。此步骤需要在napi_init的过程中处理。
2024-11-13 22:12:13
421
原创 HarmonyOS 实战开发 —— 基于C++能力的资源访问
根据应用沙箱目录的 规范 ,在Native C++侧定义完整的沙箱路径。如:/data/app/el2/100/base/{包名}/haps/entry/files/test.txt。在ApplicationContext对象中获取应用沙箱路径,传递应用沙箱路径到Native C++侧。参考场景一的使用C++标准的文件接口打开文件,path传入对应文件所在的沙箱路径。方式一:通过arkts侧传递。
2024-11-13 21:19:23
390
原创 HarmonyOS 实战开发 —— 对各种图片编解码格式的支持
注意:LYCIUM_ROOT代表lycium所在目录的绝对路径;ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。实现方式参考上述heif格式,策略相通均为C++侧读取图片数据转换为pixelMap返回给TS侧。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。2.1 将libavif库添加到工程中,编译环境的搭建参考 准备三方库构建环境。2.1.1 编译第三方库。
2024-11-13 20:20:04
697
原创 HarmonyOS 实战开发 —— 基于自定义注解和代码生成实现路由框架
由于TS语言特性,当前只能使用自定义装饰器使用@AppRouter装饰器来定义路由信息。
2024-11-13 17:22:39
866
原创 HarmonyOS 实战开发 —— 基于原生能力的深色模式适配
自定义两套颜色资源(resources/dark/element/color.json和resources/base/element/color.json),通过$r的方式加载颜色资源的key值。通过使用系统资源,不同的开发者可以开发出具有相同视觉风格的应用,不需要自定义2份颜色资源,在深浅色模式下也会自动切换成不同的颜色值。值得一提的是,barContentColor并不支持使用$r的方式加载颜色资源的key值,它是一个string类型的,因此,这里的是不是暗夜模式就要开发者自己去写代码判断。
2024-11-13 16:03:12
522
原创 HarmonyOS 实战开发 —— 基于ArkUI的验证码实现
基于自定义键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,拉起的键盘是自定义数字键盘,验证码的输入框带选中效果。基于自定义键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,拉起的键盘是自定义数字键盘,验证码的输入框带选中效果。:基于系统键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,验证码的输入框带选中效果。2.通过输入法框架拉起系统键盘,对系统键盘进行监听,即可做到输入和删除的效果。
2024-11-13 15:38:35
642
原创 HarmonyOS 实战开发 —— 跨语言的复杂参数类型传递
ArkTS 侧 接收 Native C++ 侧返回的 Array,通过 napi_create_arraybuffer 创建一个 arraybuffer 数组,根据创建的 arraybuffer 通过 napi_create_typedarray 创建一个 typedarray 并将 arraybuffer 存入 output_array,然后给 arraybuffer 赋值,最后返回 output_array。获取ArkTS侧传来的文件路径,处理完后返回pixelmap给ArkTS侧。
2024-11-13 15:03:09
562
原创 HarmonyOS 实战开发 —— 基于RichEditor的评论编辑
使用RichEditor的属性customKeyboard控制切换系统键盘还是自定义键盘,添加表情使用addImageSpan,删除内容使用deleteSpans,并通过获取光标所在位置进行删除。
2024-11-13 14:23:06
486
原创 HarmonyOS 实战开发 —— 基于HAR的跨模块C++头文件引用
多个模块使用同一份C++代码是App开发中很常见的问题,比如多个模块使用同一个自研的加解密库、集成三方开源SO库暴露其中的C++代码等。注意事项:双冒号前面指的是srcHar/oh-package.json5配置中的name,双冒号后面跟着的是步骤2中srcHar中对外导出的的so库名称,名称必须要一致。2、在srcHar模块的build-profile.json5中配置C++头文件的目录。5、在desHar的cpp源码中使用 srcHar提供的C++方法。场景:模块A引用模块B的C++接口。
2024-11-12 22:15:23
170
原创 HarmonyOS 实战开发 —— 基于webView的嵌套滚动
实现方法:通过web组件的type属性设置为1,即全量展开且嵌套滚动场景,并且layoutMode接口用来设置web页面是否全量展开,如需全量展开则设置参数为WebLayoutMode.FIT_CONTENT,nestedScroll接口用来设置web组件与上下层组件的嵌套滚动关系,推荐使用子组件优先模式(NestedScrollMode.SELF_FIRST)。整体实现效果为:页面整体为一个Scroll,Scroll中嵌套一个Tabs组件,Tabs里有多个web组件可以实现首页效果。
2024-11-12 21:15:21
404
原创 HarmonyOS 实战开发 —— 基于tabs实现页面布局
在页面布局过程中,Tabs可以将产品包含的所有内容进行清晰分类,一目了然地呈现应用的内容范围,方便概览与跳转
2024-11-12 20:31:48
546
原创 HarmonyOS 开发实践——基于bindSheet的半模态弹窗
半模态转场通过bindSheet属性为组件绑定半模态页面,在组件插入时可通过设置自定义或默认的内置高度确定半模态大小。可以通过设置height属性来实现自定义高度;也可以通过设置height属性的SheetSize枚举类型,默认是LARGE。MEDIUM指定半模态高度为屏幕高度一半。LARGE指定半模态高度几乎为屏幕高度。指定半模态高度为适应内容的高度。@Entry@Component@Builder...... //半模态弹窗页面内容build() {Row() {
2024-11-12 17:02:38
344
原创 HarmonyOS 实战开发 —— 基于原生能力的跨应用跳转
准备被拉起方的app信息,其中目标app的图标需要拉起方应用自己准备。uri字段规格详见文末的常见问题Q1。在弹窗显示之前判断应用是否已安装,在弹窗中显示已安装的应用,并实现点击跳转到该应用。2.支付应用不存在,拉起h5页面进行支付。1.支付应用存在,拉起支付应用。添加按钮,点击出现支付应用列。
2024-11-12 15:52:35
279
原创 HarmonyOS 实战开发 —— 基于ImageKit对图片进行处理
format为图像的编码格式;quality为图像质量,范围从0-100,100为最佳质量。在ts侧传入pixelmap和文件fd到native侧。创建图像编码ImagePacker对象。设置编码输出流和编码参数。创建编码器实例对象。
2024-11-12 15:00:09
262
原创 HarmonyOS 实战开发 —— 基于measure实现的文本测量
搜索框展示历史记录,单个子组件超过固定长度后展示省略号,固定只展示两行,超出的文字被截断,通过点击按钮展示后续文本内容。搜索框展示历史记录,单个子组件超过固定长度后展示省略号,固定只展示两行,超出的文字被截断,通过点击按钮展示后续文本内容。2、测量两行文本和全部文本的高度,当全部文本的高度超过两行文本的高度时进行展开的逻辑。展开,当所有文本展开后,最后面跟着收起。3、文本全部展开后,点击收起,所有文本全部收齐变成固定的两行。1、文本默认超过两行时,直接截断,在截断文本后添加…文本收起态(即展开逻辑)
2024-11-12 14:15:45
326
原创 HarmonyOS 实战开发 —— 基于AOP的代码插桩
方案:通过Aspect.addBefore对自定义方法进行执行前插桩记录方法调用前时间、Aspect.addAfter对自定义方法进行执行后插桩记录执行后时间,以统计方法耗时及调用次数。let t1 = 0;let t2 = 0;})count+=1console.log(methodName+"方法耗时为t2 - t1 = " + (t2 - t1).toString());console.log(methodName+"方法调用次数为count = " + count);
2024-11-12 13:32:24
370
原创 HarmonyOS 实战开发 —— 基于PhotoViewPicker对图片进行操作
此时,可以直接使用安全控件中的保存控件,免去权限申请和权限请求等环节(创建媒体资源需要在应用中申请相册管理模块权限’ohos.permission.WRITE_IMAGEVIDEO’),获得临时授权,保存对应图片。当前所有picker的save接口都是用户可感知的,具体行为是拉起FilePicker, 将文件保存在系统文件管理器管理的特定目录,与图库管理的资源隔离,无法在图库中看到。与需要触发系统应用并由用户选择具体保存路径的Picker不同,保存控件可以直接保存到媒体库路径,使得操作更为便捷。
2024-11-11 22:21:43
620
原创 HarmonyOS 实战开发 —— 图像撕裂、掉帧等异常现象的原理以及优化方案
另外也可以看出来期间存在CPU资源浪费,双缓冲只会提供两个Buffer,B被GPU处理占用,A正在用显示,那么在第二个16ms里面,CPU就无法获取到Buffer处理UI更新,在Jank的阶段空空等待。GPU 开辟A、B两个缓冲区,并对缓冲区进行同步加锁处理,执行流程就是当A缓冲区拿到第一帧数据,就给A缓冲区加上一把锁,屏幕控制器从A拿到数据并逐行扫描完成,A帧缓冲区解锁,并把屏幕控制器指向B缓冲区,B缓冲区加锁并逐行扫描显示,在屏幕控制器扫描B缓冲区的时候,A缓冲区拿到GPU传过来的新数据,以此类推。
2024-11-11 21:16:32
693
原创 HarmonyOS 实战开发 —— 基于PhotoViewPicker对图片进行操作
PhotoAccessHelper.createAsset接口 需要ohos.permission.WRITE_IMAGEVIDEO权限,ohos.permission.WRITE_IMAGEVIDEO权限 为系统等级,该权限当前可申请的场景与功能:应用需要克隆、备份或同步图片/视频类文件。此时,可以直接使用安全控件中的保存控件,免去权限申请和权限请求等环节(创建媒体资源需要在应用中申请相册管理模块权限’ohos.permission.WRITE_IMAGEVIDEO’),获得临时授权,保存对应图片。
2024-11-11 20:35:26
733
原创 HarmonyOS 实战开发 —— Native保存图片到应用沙箱
当前编译后加载libcurl.so时,通过hilog日志发现依赖了libcurl.so libcurl.so.4 libnghttp2.so libnghttp2.so.14 libzstd.so几个so文件。3.点击"保存Rawfile图片",前端通过调用Native侧暴露的saveImageOfRawfileCallback接口将rawfile中的图片sandBoxTest.jpg保存到应用沙箱中并返回沙箱路径到前端进行显示;传入的参数为js的资源对象、rawfile中的图片名、应用的文件路径。
2024-11-11 17:29:11
557
原创 HarmonyOS 实战开发 —— 基于子窗口实现应用内悬浮窗
app应用会使用悬浮窗/悬浮球的方式来给用户展示一些应用重要&便捷功能的入口,类似android和iOS应用中常见的应用内可拖拽的悬浮球和小窗口视频悬浮窗,点击悬浮窗修改悬浮窗样式和响应事件跳转页面,在跳转页面后依然可以显示在屏幕中上个页面拖拽后的固定位置等。可响应正常点击事件,可通过拖动触发悬浮窗的拖拽移动,根据最后手势停留位置,做动画靠屏幕左或靠右显示,跳转和返回上级页面后悬浮窗依然存在,且相对手机屏幕位置不变。通过获取窗口上下文,实现在悬浮窗点击后,实现主窗口Router跳转。
2024-11-11 15:27:00
551
原创 HarmonyOS 实战开发 —— 基于List和Scroller由简单到复杂列表布局开发实践
LazyForEach数据懒加载:数据量大的List尽量用LazyForEach加载数据,可明显优化性能,经过测试列数为100以上,LazyForEach也无明显卡顿。整体运用Stack组件(List组件+List组件)布局,左List作为城市列表,右List快捷导航列表,通过ListItem对对应数据进行渲染。运用List组件作为整个首页长列表的容器,通过ListItem对不同模块进行定制。多列表滚动横向纵向联动,如汽车参数对比,股票信息列表。在多列表页面开发中,数据展示往往有联动关系,
2024-11-11 14:41:10
324
原创 HarmonyOS 实战开发 —— 基于Taskpool的多线程操作
调用executeDelayed函数3秒后,会进入TaskDelayServiceHandle函数执行,返回返回后,会进入executeDelayed后面的then的函数体中执行。task1依赖task2,task2依赖task3,上面任务执行的顺序是:task3执行完毕后再执行task2,最后执行task。task1执行完毕后,执行task2,最后是task3执行完毕。2)后面任务的执行,依赖另一个任务的一些处理结果后,继续执行。task1执行完毕后,根据if判断启动task2任务执行。
2024-11-11 14:15:57
612
原创 HarmonyOS 实战开发 —— 基于Napi调用ArkTS/系统接口
场景二: 系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;场景一:系统提供了ArkTS 接口,但未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS接口;通过创建线程安全函数的方式 调用系统的异步接口。例如: 获取设备的屏幕宽高。
2024-11-10 22:03:51
577
原创 HarmonyOS 实战开发 —— 如何在鸿蒙中实现AOP(代码插桩)能力?
Aspect类用于封装提供切面能力(Aspect Oriented Programming,简写AOP)的接口,这些接口可以用来对类方法进行前后插桩或者替换实现。
2024-11-10 21:29:35
627
原创 HarmonyOS 实战开发 —— 基于设置应用的应用权限、通知设置跳转
当用户使用一些需要用户授权的api时(如访问获取联系人信息),若用户首次拒绝授权,则需要引导用户到权限设置页面能够主动进行应用权限的修改。当用户使用一些需要用户授权的api时(如访问获取联系人信息),若用户首次拒绝授权,则需要引导用户到权限设置页面能够主动进行应用权限的修改。引导用户跳转到系统设置页进行权限,通知的相关设置,类似android和iOS应用中常见的应用内跳转到设置进行通知开启或权限设置的操作。暂无直接跳转权限管理的方式,可通过跳转至应用详情进行用户申请权限的修改。进入设置-应用详情页。
2024-11-10 20:10:50
618
原创 HarmonyOS 实战开发 —— 基于原生的跨模块资源访问
对于“color”、“float”、“string”、“plural”、“media”、“profile”等类型的资源,通过"$r(‘app.type.name’)"形式引用。其中,hsp为hsp模块名,type为资源类型,name为资源名称。A:当前支持通过$r(“app.string.name” + 1)拼接的方式加载资源(包括变量拼接的形式),跨模块的场景也适用。r"和"$rawfile"跨包访问HSP包资源无法提供编译时的资源校验,需要开发者自行保证使用资源存在于对应包中。
2024-11-10 18:52:47
732
原创 HarmonyOS 组件化实战开发 —— Navigation常见场景&解决方案
Navigation通过customNavContentTransition事件提供自定义转场动画的能力,当转场开始时,通过回调函数告知开发者,告知此次动画from(从哪来)、to(到哪去)、是Push、Pop亦或是Repalce。这里需要注意当为根视图时,NavContentInfo的name值为undefined。开发者可以在customNavContentTransition的回调函数中进行动画处理,返回NavigationAnimatedTransition自定义转场协议已实现自定义转场。
2024-11-09 21:34:56
858
原创 HarmonyOS 实战开发 —— super planner应用开发
1、在进行价钱输入时,需要进行约束,但是,普通约束无法完成,只能通过键盘进行约束。1、用户记录账单,账单统计的功能,可以根据日期筛选账单记录。super planner主要功能是进行账单记录和统计,以及日常的事情、idea的记录和设置提醒的功能。2、用户可以通过记事本进行事情记录、idea记录、以及提醒设置。2、采用Navgation跨包跳转,并进行路由跳转二次封装,以及其基础组件的二次封装。1、采用三层架构,common层、features层、entry层。4、使用首选项进行用户信息存储。
2024-11-09 21:01:29
785
原创 HarmonyOS 实战开发 —— 相对布局 RelativeContainer
对于组件的尺寸,若子组件某个方向上设置两个或以上 alignRules 时最好不设置此方向尺寸大小,否则对齐规则确定的组件尺寸与开发者设置的尺寸可能产生冲突。比如某个组件在垂直方向设置了 top 和 bottom 约束,那么在实际的开发过程中就不要再次设置该组件的高度。我们可以结合 Column 和 Row 容器实现上面效果,但是今天主要讲下 RelativeContainer 相对布局容器,这有点类似于 iOS 开发中的布局约束概念,实现方式都是以某个元素为锚点进行相对布局。即可实现我们想要的效果。
2024-11-09 20:16:30
450
原创 HarmonyOS 实战开发 —— 自定义tabs导航栏实现切换效果
但是该导航栏为默认样式,要想实现更多样式,必须自定义TabBar。自定义TabBar步骤1.使用@Builder修饰一个函数tabBarBuilder(),里面是自定义的TabBar的结构。2…tabBar()中传参为自定义构建器this.tabBarBuilder()。注:构建器函数里面是可以传参的,所以多个TabContent可以共用一个tabBarBuilder()然后传不同的参数。.onChange()事件和.onTabBarClick()事件都可以获得当前页面的索引。
2024-11-09 19:06:08
287
原创 HarmonyOS 开发实战 —— ArkTS基础知识 - 类、接口及泛型
前面我们学习了 ArkTS基础知识 - 声明变量、常量、类型和函数,本文我们继续学习鸿蒙开发中使用ARKTS的类、接口、泛型、字段、方法、继承以及模块导出和导入的概念,为鸿蒙应用开发者提供了基础理论支持。学完本章,ArkTS的基础语法基本上就是学完了。希望这篇文章能够帮到你们。鸿蒙(HarmonyOS)北向开发知识点记录~鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~鸿蒙应用开发与鸿蒙系统开发哪个更有前景?嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
2024-11-08 22:14:17
699
原创 HarmonyOS 开发实战 —— 模块化架构组件 (使用系统路由表+注解+hvigor插件 自动配置项目模块化)
satis/oh-router 与 hvigor插件 @satis-sun/modularity-plugin 配合使用,无需手动配置系统路由表,使用注解的方式即可完成系统路由表的配置。
2024-11-08 21:31:19
675
原创 HarmonyOS 开发实战 —— List组件的使用与AlphabetIndexer联动实践
在鸿蒙应用开发中,List组件是一个非常重要的元素,它用于展示一系列数据项,非常适合构建列表界面,例如商品列表、联系人列表、消息列表等,可以轻松高效地显示结构化、可滚动的信息。
2024-11-08 20:17:16
787
原创 HarmonyOS 开发实战 —— 在ArkTS中,实现不在Enter模块中就可以创建的自定义弹窗
1、使用@CustomDialog装饰的自定义组件作为弹窗的布局2、在@CustomDialog装饰的自定义组件中必须声明CustomDialogControlle类型的变量3、在需要显示弹窗的@Entry里面再次声明一个CustomDialogControlle类型的变量,并完成初始化这样就可以通过@Entry里的CustomDialogControlle类型的变量进行控制弹窗的关闭和打开,但无法得知该弹窗打开/关闭状态。
2024-11-08 17:42:38
335
原创 HarmonyOS 开发实战——自定义弹框使用(CustomDialog+TextPicker组合)
在移动应用开发中,弹框是一种常见的用户交互组件,用于在应用界面上提供额外的信息或操作选项,也是移动开发中必用的功能,实际开发中系统提供的弹框往往不能完全满足实际业务需求,很多时候需要根据业务需求对弹框内容进行自定义,但凡遇到自定义弹框及弹框内部内容,就需要根据实际情况进行组合式使用。同理,在HarmonyOS开发中系统也提供了弹框的使用及自定义弹框的使用方法,可以说是提供了丰富的API来支持自定义弹框的开发,这可以让开发者根据自己的需求定制独特的用户界面和交互体验。
2024-11-08 16:22:10
787
原创 HarmonyOS 开发实战——ZRouter让系统路由表变的更简单(轻量级动态路由库)
ZRouter是一款轻量级的动态路由库,基于Navigation系统路由表和Hvigor插件实现的方案。对Navigation组件简化使用,封装一系列简单易用API,支持链式调用,无需再关注路由表的配置,保持着对Navigation组件零侵入零耦合;支持多个拦截器(支持优先级和中断拦截)和全局拦截器,可实现页面跳转和显示、埋点、登录等拦截处理;支持自定义URL路径跳转配置,可以通过URL路径来跳转原生不同页面;支持第三方Navigation的系统路由表使用本库API;
2024-11-08 15:29:09
962
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅