自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 二十四、【鸿蒙 NEXT】对组件截图

本文介绍了在鸿蒙Next系统中实现组件截图功能的方法。首先通过inspector.ComponentObserver监听目标组件的draw事件,确保组件绘制完成后再进行截图。使用getComponentSnapshot接口获取组件截图后,可以通过OffscreenCanvas对图像进行裁剪处理(如高度裁剪一半)。文中提供了完整代码示例,包括监听绘制事件、获取截图、图像裁剪等关键步骤,并指出需要注意使用setTimeout避免截取空白图片,以及单位转换(px转vp)等问题。该方法适用于本地和网络图片的组件截图

2026-01-04 22:16:59 357

原创 二十三、【鸿蒙 NEXT】代码混淆

摘要:鸿蒙应用代码混淆配置指南:1.在build-profile.json5中开启混淆,指定obfuscation-rules.txt(本模块生效)和consumer-rules.txt(依赖模块生效)两个配置文件;2.obfuscation-rules.txt需配置-enable-toplevel-obfuscation和-enable-export-obfuscation等核心规则;3.使用DevStudio工具自动扫描生成白名单配置文件,避免人工排查耗时;4.将生成的配置文件内容复制到consumer

2025-12-30 23:36:59 238

原创 二十二、【鸿蒙 NEXT】扫码功能

本文介绍了如何实现一个扫码功能,主要包含相机实时扫码和相册图片识别两种方式。关键组件包括XComponent用于相机预览、ScanKit的customScan工具类实现相机扫码、detectBarcode工具类解析相册图片。实现步骤包括:1)构建包含标题、扫描动画和操作按钮的界面;2)申请相机权限;3)初始化customScan并启动扫描,需依赖XComponent的宽高参数;4)处理扫码结果展示。同时提供了闪光灯控制、相册选择等功能的具体实现代码,包括权限管理、屏幕适配、扫码结果回调等完整流程。

2025-12-18 07:52:44 287

原创 二十一、【鸿蒙 NEXT】分词和汉字转拼音

鸿蒙Next系统实现中文搜索功能时,需处理中文转拼音和分词两个关键点。系统提供i18n.Transliterator工具类实现中文转拼音,textProcessing工具类实现分词功能。但需注意批量分词调用可能导致UI卡顿,因跨进程调用会消耗线程资源。解决方法是通过PromiseBatchUtils分批次调用(如每批4次),并在子线程中执行。完整实现包括SegmentUtil工具类和并发控制逻辑,确保不影响UI响应。

2025-12-15 08:06:22 387

原创 二十、【鸿蒙 NEXT】改变图片颜色

鸿蒙next中可通过Image组件的colorFilter属性改变图片颜色。文章介绍了将十六进制颜色字符串(如'#E6000000')转换为ColorFilter对象的方法hexColorToColorFilter(),以及将Resource中的color资源转为十六进制字符串的函数ColorResource2str()。最后展示了完整实现代码,演示了如何为Image组件应用不同颜色滤镜,包括直接使用十六进制颜色值和资源文件中定义的颜色值。

2025-12-12 07:48:49 537

原创 十九、【鸿蒙 NEXT】高亮文本

本文介绍了三种在开发中实现字符高亮的方法:1. 使用Text+Span组合,适合固定字符串的高亮展示;2. 使用Text组件的双参数形式,通过TextController动态控制高亮样式,适用于搜索等场景;3. 使用RichEditor组件,通过RichEditorStyledStringController设置高亮内容。每种方法都提供了代码示例,展示了如何通过索引设置特定字符的字体颜色和大小等样式属性。这些方案可以满足不同场景下对字符串部分内容进行高亮的需求。

2025-12-10 07:20:52 149

原创 十八、【鸿蒙 NEXT】实现图片动画

鸿蒙开发中实现图片动画的两种方案:1)使用Image组件配合AnimatedDrawableDescriptor对象,通过循环加载图片资源生成PixelMap数组;2)使用ImageAnimator组件直接传入图片路径数组,但存在持续解析图片导致性能损耗和日志冲刷问题,建议预先解析为PixelMap再传入组件。两种方式都能实现循环播放动画效果,但ImageAnimator需要额外处理性能优化问题。

2025-12-09 07:25:05 361

原创 十七、【鸿蒙 NEXT】如何实现lottie动画

鸿蒙Next推荐使用@ohos/lottie-turbo组件加载Lottie动画,性能优化30%+。文章介绍了5个常用场景:1)基础加载方式;2)跳转到指定帧;3)播放指定片段;4)反向播放动画;5)重新加载动画路径。通过LottieController可实现帧控制、片段播放、方向设置等功能,支持并行加载和子线程渲染,提升复杂动画场景下的流畅度。

2025-12-06 07:16:29 525

原创 十六、【鸿蒙 NEXT】如何申请权限

本文介绍了应用开发中的三种权限授权方式:1.系统授权(system_grant) - 只需在module.json5中声明即可自动授予;2.用户授权(user_grant) - 需在配置文件中声明权限并通过代码实现三步授权流程:检查权限状态、首次弹窗授权、二次授权提示;3.手动设置(manual_setting) - 跳转系统设置页面手动授权。文章详细说明了每种方式的实现方法,包括配置文件声明、权限检查接口调用以及授权弹窗处理流程,并提供了完整的代码示例。

2025-12-04 23:21:11 292

原创 【鸿蒙 NEXT】系统设置中各个页面的uri

系统设置URI摘要 本文档整理了系统设置页面的URI列表,包含主要功能模块及其层级关系。主要涵盖通知管理、输入法、网络连接(WLAN/蓝牙/移动网络)、显示设置、声音控制、生物识别、应用管理、隐私设置等核心功能。URI命名采用层级结构,如"system_and_updates"表示系统和更新二级页面,"date_and_time"为其下的三级页面。特殊场景如OOBE阶段、样机管理也有独立URI标识。部分功能延伸至五级页面(如时区选择),体现了系统的细粒度设置能力。该列

2025-12-04 23:19:41 796

原创 十五、【鸿蒙 NEXT】Navigation与router与Tabs组件

鸿蒙开发中导航组件选择指南:对于路由能力,推荐使用Navigation组件,其支持自动适应屏幕大小(宽屏时双页展示)并提供灵活的栈操作接口;而router组件将不再演进。作为首页导航,建议选择Tabs组件,因其在同一页面内切换内容时保留底部工具栏,而Navigation组件跳转时会覆盖工具栏。两种组件各有适用场景:Navigation适用于多级页面跳转,Tabs更适合首页导航。

2025-05-28 06:46:07 621

原创 十四、【鸿蒙 NEXT】如何更改har包的版本号

本文介绍了直接修改HAR包版本号的方法:1)解压HAR包获取package目录;2)修改oh-package.json5中的版本号(仅支持x.x.x格式);3)重新打包成HAR文件。该方法适用于需要调整三方提供的HAR包版本号但原始包未修改的情况,操作简单有效。(99字)

2025-05-26 06:24:01 614

原创 十三、【鸿蒙 NEXT】使用canvas实现微信头像

本文介绍了使用Canvas实现微信式群头像的方法。通过定义画布尺寸、头像间距和成员数量,根据不同人数(3/4/5/6/9人)采用不同的布局算法:3人和4人采用2x2网格,5人和6人采用3x2布局,9人采用3x3网格。核心代码使用CanvasRenderingContext2D的drawImage方法精确计算每个头像的位置和尺寸,最后通过getPixelMap和setPixelMap完成最终渲染。该方法实现了类似微信的群组头像拼接效果。

2025-05-25 22:36:01 296

原创 十二、【鸿蒙 NEXT】如何使用系统api实现视频压缩

鸿蒙系统视频压缩方案:使用内置AVTranscoder实现高效压缩摘要:本文介绍了一种在鸿蒙系统中不依赖第三方组件实现视频压缩的方法。通过媒体库的AVTranscoder组件,开发者可以设置比特率等参数控制输出视频大小,例如将30秒100MB视频压缩至10MB以内。方案包含完整实现步骤:1)计算目标比特率参数;2)配置回调监听;3)设置输入输出文件句柄。文章提供了从相册选取视频到完成压缩的完整代码示例,包括视频选择、参数配置、压缩过程控制(开始/暂停/恢复)及结果保存等功能实现。该方法充分利用鸿蒙原生能力

2025-05-25 21:47:12 867

原创 十一、【鸿蒙 NEXT】@Observed装饰器和@ObjectLink装饰器

我们经常会遇到这种场景,比如从后台获取到一个数组对象T[],然后会根据该数组对象去循环渲染页面。当某个元素T中的某个属性值变更的时候,需要重新刷新页面。那么我们可以怎么操作去刷新页面呢?本节将讲下刷新页面的方法,以及它的优缺点。

2025-03-21 07:24:53 881

原创 十、【鸿蒙 NEXT】如何解决模块之间相互依赖问题

我们在业务开发时,会根据功能特点,划分不同的功能hsp模块,使得不同功能边界划分清晰,也能更好的将各个功能模块解耦,但是在一些业务复杂场景,难免会出现各个hsp模块之间存在相互依赖场景,比如A模块需要调用B模块的一个查询数据的方法,B模块也需要调用A模块一个查询数据的方法。但是模块之间又不能相互依赖,否则会造成app崩溃。那么如何解决这种模块之间相互依赖的问题呢?本节将介绍一种方法,希望给大家一个参考。我们可以先定义一个公共的模块common,该模块是一个最底层模块,不依赖任何其他模块。

2025-03-18 06:47:55 720

原创 九、【鸿蒙 NEXT】如何快速分析AppFreeze

在应用发布后,经常会遇到一些appFreeze的报错信息,那么我们可以如何快速的定位分析出问题点,本章就讲一下一些常用的判断方法,供大家参考。

2025-03-09 16:41:26 423

原创 八、【鸿蒙 NEXT】ArkTS开发中遇到的注意点

在实际开发中,经常遇到一些细节的点,可能在出现问题时,看代码逻辑,没有任何问题,但是运行结果就是不符合预期,本节将梳理一些这样的问题点,希望能帮助到大家。

2025-03-09 11:32:59 1089

原创 七、【鸿蒙 NEXT】如何将多个图片合成一张图片

使用多媒体图片相关接口,将多个图片写入新图中,入参是一组图片流,怎么获取图片流可以参考上一篇文章,直接通过网络下载。或者将本地图片直接转为图片流。一般涉及聊天的场景,都会有用户头像展示,如果涉及群聊,群组的头像可能是多个头像拼接而成,本章就讲下如何实现图片拼接。比如,我要将最多4个头像拼接成一个40*40的图片,可以参考如下实现。2、使用图片接口,将多个图片流写入新的图片中。二、使用图片接口,将多个图片流写入新的图片中。1、纯粹采用布局实现图片拼接。一、纯粹采用布局实现图片拼接。

2025-03-07 22:18:03 1150

原创 六、【鸿蒙 NEXT】如何实现图片下载,并保存本地

可能很多应用都会涉及网络图片的下载,本节将介绍下,如何在纯鸿蒙中实现图片的下载,并将图片保存到本地目录,或者直接保存到相册中。本节主要涉及以下几点:1、下载图片流2、将图片流转为Image组件能展示的对象PixelMap3、将图片保存到本地路径,路径由用户选择4、直接将图片保存到相册。

2025-02-26 23:19:17 1048

原创 五、【纯血鸿蒙】如何抽取公共样式

开发过程中我们经常会遇到同一类型的组件样式都是一样的,如果每个组件都复制一份样式,代码会产生冗余,并且如果要改动这个样式,由于代码太分散,很容易改漏。那么纯血鸿蒙中如何抽取公共样式呢。主要分为两种(1)单个ets文件的样式抽取,这种方式抽取的样式只能在当前ets文件中共享。其他ets文件无法引用。(2)跨ets文件的公共样式抽取。1、使用@Styles装饰器,该装饰器只能抽取组件的通用属性及通用事件,比如height,width这些属于所有组件都有的属性,叫做通用属性这里有两种写法,一个是全局定义的需要加f

2025-02-23 17:20:56 422

原创 四、【纯血鸿蒙】关系型数据库创建与升级

在app开发过程中,关系型数据库基本都会用到,纯血鸿蒙的关系型数据库底层也是sqllite,只不过纯血鸿蒙用的是ArtTS语法写的。本章就讲解下如何用ArtTS语法来进行关系型数据库的创建与升级。

2025-02-23 16:33:03 601

原创 三、鸿蒙模块划分,hap/hsp/har三种模块如何选择

HAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry和feature。entry:应用的主模块,作为应用的入口,提供了应用的基础功能。feature:应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。应用程序包可以只包含一个基础的entry包,也可以包含一个基础的entry包和多个功能性的feature包。

2024-09-01 16:07:10 2303

原创 一、鸿蒙原生开发语言:ArkTS语言介绍

ArkTS语言是官方主推的开发鸿蒙原生App应用的语言,该语言的语法和TypeScript比较相似,对于有前端基础的同学,学习起来应该比较容易。本节主要介绍下ArkTS与TypeScript的关系,以及ArkTS的特性。总结一句话,ArkTS是语法的定义,ArkUI是基于该语法的UI框架。集成了TS的语法,集成了目前流行的前端框架中的数据驱动UI的能力,并提供一套现成的UI框架,这样的一个超集

2024-08-25 16:09:15 2385

原创 harmonyOS鸿蒙-UI-自定义弹窗

上面代码中dialogController就是弹窗控制器,即CustomDialogController对象,该对象构造方法接收一个对象参数,其中builder对应值就是自定义的弹窗组件,需要@CustomDialog标注,alignment定义弹窗的位置,此处弹窗展示在底部,offset是弹窗相对于当前位置的偏移量,此处相对于底部再向上偏移24,效果如下。1、使用@CustomDialog装饰器装饰自定义弹窗,此装饰器内进行自定义内容(也就是弹框内容)2、创建构造器,与装饰器关联。

2023-07-02 22:33:32 2050

原创 harmonyOS鸿蒙-数据管理-用户首选项(@ohos.data.preferences)

用户首选项为应用提供key-value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串,值得存储数据类型包括数字型、字符型、布尔型以及3种类型的数组类型。

2023-07-02 21:57:41 4934 1

原创 HarmonyOS-页面和自定义组件生命周期

1、自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI复用2、页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才能调用页面的生命周期1、aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行2、aboutToDisappear:在自定义组件即将销毁时执行。

2023-07-02 17:05:35 1477

原创 鸿蒙-关系型数据库(@ohos.data.relationalStore)

update函数需要传入两个参数,第一个是需要更新的列值,是一个对象,key为列名,value是对应的值,第二个参数是一个条件对象,上面代码表示更新userInfo表中name='lisi'的age更新为66。batchInsert函数第一个参数是表名称,第二个参数是一个ValuesBucket数组对象,ValuesBucket表示key-value的对象,key表示表的列名称,value是对应的值。2、RdbPredicates 用来定义数据库的操作条件,可用于查询,修改,删除的条件语句。

2023-07-02 16:35:47 6054 2

原创 HiLog日志打印

业务调用日志打印公共类,因为我们公共日志类参数是一个可变数组,我们可以把第一个参数作为业务类型的TAG,比如下面的"EntryAbility",第二个参数传入要具体打印的日志,如下。4、用DevEco Studio查看日志。

2023-07-02 10:16:08 794

原创 Optional取代null

如果给定一个Person对象,想要获取对应保险公司的名称,那么为了防止空指针异常的出现,我们往往会这么获取,每次引用一个变量都会做一次null检查、if嵌套层数多,代码膨胀。在项目中我们经常遇到空指针异常,为了防止该异常发生,我们往往需要加一大堆的判断,来防止对象是null的场景。(1)Optional.ofNullable():创建一个可接受null的Optional对象。(3)orElse():当Optional对象中存储的值不存在时,返回一个默认值。为了防止空指针异常,我们往往会这么写。

2023-05-07 09:04:18 196

原创 Android之服务service

新建一个类,并继承Service类,并实现类的方法onCreate、onStartCommand、onDestory,者三个方法是最常用的,其中onCreate方法会在服务创建时调用,onStartCommand方法会在每次服务启动时调用。通常,如果希望服务一起动就去执行某个动作,可以把逻辑写在onStartCommand中。另外每个服务都需要在AndroidManifest.xml中注册才能生效。

2023-04-23 07:02:58 1055

原创 Android 内容提供器

比如某个程序的包名是com.test.app,那么程序对应的authority可以命名为com.test.app.provider。那么以路径结尾的MIME类型可以写成vnd.android.cursor.dir/vnd.com.test.app.provider.table1,以id结尾的MIME类型可以写为:vnd.android.cursor.item/vnd.com.test.app.provider.table1。分别是从内容提供器中查询,新增,更新,删除数据。以读取联系人为例,步骤如下。

2023-04-20 07:15:45 169

原创 Android 持久化操作

(1)通过Context.getSharedPreferences获取SharedPreferences对象,第一个参数是文件名,如果文件不存在,则会创建文件,第二个参数是操作模式,目前只有MODE_PRIVATE一种模式可选,表示只有当前app才能对这个文件进行读写。(1)调用update方法,第一个参数是表名称,第二是ContentValues对象,第三个是where条件,第四个是where条件的参数,第三第四个参数不指定的话是更新所有。(4)调用Editor.apply方法提交键值对,存入文件中。

2023-04-13 06:50:59 172

原创 Android广播机制

Android、安卓、广播

2023-04-09 11:39:58 349

原创 Fragment基本用法

Fragment基本用法

2022-12-04 16:59:01 203

原创 RecyclerView基本用法

Android中RecyclerView的基本用法

2022-12-04 11:43:39 195

原创 自定义公共组件ListView

Android自定义ListView公共组件,调用方只需关注ListView的数据无需关注UI渲染

2022-12-04 10:51:04 450

原创 AsyncTask异步编程

Android

2022-11-13 16:37:53 154

原创 CompletableFuture的使用

CompletableFuture多线程

2022-07-31 15:43:21 323

原创 class.getResourceAsStream获取不到resources路径下的文件

1、现象,如下图,获取xml文件为空2、解决方案: 在Porject Sturcture->Modules中将resources文件夹设置为Resources目录,如下图

2022-02-25 08:01:04 6157

空空如也

空空如也

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

TA关注的人

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