自定义View控件流程是怎样的?,HarmonyOS鸿蒙平台架构的四个层次

绘制饼图的自定义View实现(HarmonyOS) 在绘制饼图时,我们首先获取CustomPieView的宽度和高度,然后计算饼图的半径和中心点坐标。接下来,我们使用循环绘制每个扇形区域。在示例布局文件中,我们将CustomPieView组件添加到了DirectionalLayout中,并通过height和width属性设置了组件的大小。在CustomPieView类中,我们首先定义了两个数组,一个用于存储扇形区域的颜色,另一个用于存储扇形区域的数值。首先,我们需要创建一个继承自Component的CustomPieView类,该类将负责饼图的绘制和交互。 阅读详情
  • Xxx(Context context)
  • Xxx(Context context, AttributeSet attrs)
  • Xxx(Context context, AttributeSet attrs, int defStyleAttr)
  • 定义自定义属性
  • 自定义属性通常写在res/values/attrs.xml文件中。声明自定义属性,都属于styleable,一般styleable的name和自定义控件的类名一样。
  • 获取自定义属性
  • 当在xml中创建一个view时,所有在xml中声明的属性都会被传入到view的构造方法中的AttributeSet类型的参数当中。
  • 通过调用Context的obtainStyledAttributes()方法返回一个TypedArray对象。然后直接用TypedArray对象获取自定义属性的值。
  • TypedArray对象是共享的资源,因此在获取完值之后必须要调用recycle()方法来回收。

测量View(Measure)

  • 测量
  • 一个View在展示时是有宽和高,测量View就是为了能够让自定义的控件能够根据各种不同的情况以合适的宽高去展示。测量就必须要提到onMeasure方法。onMeasure方法是一个view确定宽高的地方。
  • 重写onMeasure的固定伪代码写法:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measureWidth = measure(widthMeasureSpec, true);
int measureHeight = measure(heightMeasureSpec, false);
setMeasuredDimension(measureWidth, measureHeight);
}

  • 计算出height和width之后在onMeasure中要调用setMeasuredDimension()方法。否则会出现运行时异常。
  • 计算一些自定义控件需要的值 onSizeChange()
  • onSizeChange() 方法在view第一次被指定了大小值、或者view的大小发生改变时会被调用。

绘制View(Draw)

  • 自定义控件被创建并且测量代码写好后,接下来就调用onDraw()来绘制View
  • onDraw方法包含一个Canvas叫做画布的参数,onDraw()简单来说就两点:Canvas决定要去画什么;Paint决定怎么画
  • Canvas提供了画线方法,Paint就来决定线的颜色。Canvas提供了画矩形,Paint又可以决定让矩形是空心还是实心。
  • 在onDraw方法中开始绘制之前
  • 画笔Paint对象信息要初始化完毕。因为View的重新绘制是比较频繁的,可能多次调用onDraw,所以初始化的代码不应该放在onDraw方法里。
  • Paint画笔
  • 在绘图过程中起到了极其重要的作用,画笔主要保存颜色,样式等绘制信息,指定如何绘制文本和图形,画笔对象有很多设置方法,大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。
  • Canvas画布
  • 当调整好画笔之后,需要绘制到画布上,这就得用Canvas类。Canvas画布可以绘制任何东西。还需要设置一些关于画布的属性,比如,画布的颜色、尺寸等。
  • 常见绘制操作有哪些
  • drawRect,drawRoundRect,绘制矩形
  • drawOval,drawCircle,drawArc:绘制椭圆,圆,以及圆弧
  • drawText:绘制文本
  • drawBitmap:绘制图片
  • Rect和RectF介绍和区别
  • Rect的参数为int类型,而RectF的参数类型为float类型,从这一点上来看,RectF的精度更高一些,但是他们都是通过四个坐标参数来确定一个矩形的区域。

与用户进行交互

  • 某些情况自定义控件不仅只是展示漂亮的样式,还需要支持用户点击,拖动操作。自定义控件就需要做用户交互这一步。
  • 在Android系统中最常见的事件就是触摸事件,会调用View的onTouchEvent(android.view.MotionEvent).重写这个方法去处理事件逻辑。
  • 触控有了更多的手势,比如轻点,快速滑动等,所以在支持特殊用户交互的时需要用到android提供的GestureDetector. 只需要实现GestureDetector中相对应的接口,并且处理相应的回调方法。
  • 除手势之外,如果有移动之类的情况还需要让滑动的动画显示得比较平滑。动画应该是平滑的开始和结束,而不是突然消失突然开始。建议使用属性动画

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

HarmonyOS(66) ArkUI FrameNode实现自定义View 通过FrameNode实现类似Android的自定义View 阅读详情

相关推荐

鸿蒙HarmonyOS开发(5.0 Beta)App开发--自定义圆形图片

对比之前自己在其他程序开发中自定义组件的思路,首先寻找父组件Image和Component相关的Api,看看是否具备OnDraw方法。

yguyf1235的博客 1079

详细教程 - 从零开发 鸿蒙harmonyOS应用 第九节-——鸿蒙操作系统中的自定义视图封装:一次奇妙的旅程

自定义视图是开发鸿蒙应用时的一个重要功能。在这篇文章中,我们将详细探讨如何在鸿蒙系统中实现自定义视图的封装,并提供一些代码示例作为你的地图。在鸿蒙操作系统中,我们可以通过继承类来创建自定义视图。就像你是一位探险家,Component类就是你的指南针,它将引导你走向正确的方向。init();init();init();// 设置画笔颜色为黑色@Override// 绘制一个黑色的矩形在上述代码中,我们定义了一个CustomView类,该类继承自Component类。我们在。

爱蹦跶的全栈大A阿 990

【HarmonyOS 鸿蒙实战开发】 骨架屏实现案例

本示例介绍通过骨架屏提升加载时用户体验的方法。骨架屏用于在页面数据加载完成前,先给用户展示出页面的大致结构(通常以灰色或其他浅色系的占位图形式呈现),待接口数据加载完成后,再渲染出实际页面内容并替换掉骨架屏。通过网络接口返回的状态改变 loadingCollectedStatus 值,动态切换页面内容:初始显示骨架屏(LoadingView);成功且有数据则显示列表页(ListView);数据为空显示无数据页(NoneContentView);加载失败则显示失败页(LoadingFailedView)。

CTrup的博客 823

HarmonyOS实战:自定义view

一、自定义组件 鸿蒙自定义view的实现方式是继承Component、实现DrawTask接口。然后在构造函数里面调用addDrawTask(this)。代码如下: public class View extends Component implements Component.DrawTask { protected Context mContext; /** * This view is visible. * Use with {@link #setVisibi

JiangJsf的博客 1380

eLabRadio软件无线电虚实结合仿真开发平台简介

在使用仿真平台时,不要关闭设备或断开设备与PC机之间的网络连接,否则,仿真平台将无法正常工作。注:采用eNodeX设备认证方式,当出现“设备不存在”的报错时,请检查计算机IP是否和硬件设备IP处于同一网段,或者是否是先连接好网线,再开启硬件设备的。①此登录方式下,需要先建立软件与硬件的通信:在登录窗口点击【网络配置】,参照下图输入设备IP,服务器地址无需设置,设置完成后点击确认,此时登录界面无需设置账号密码;,拷贝到电脑上,使用管理员权限运行setup.exe,下一步直到安装完成,桌面会生成快捷方式。

weixin_55349105的博客 6320

Spring Authorization Server 实战指南:构建企业级 OAuth2/OIDC 授权中心

本文介绍了Spring Authorization Server作为构建企业级OAuth2/OIDC授权中心的解决方案。首先分析了传统认证模式的不足和OAuth2/OIDC协议的优势,然后详细讲解了如何从零搭建授权服务器,包括核心配置类、授权流程、数据库持久化等关键实现。文章还涵盖了资源服务器配置、客户端应用集成、安全最佳实践以及生产环境部署建议,完整呈现了Spring Authorization Server的核心功能和使用场景。通过本教程,开发者可以掌握统一认证授权系统的构建方法,为微服务架构提供安全可

qq_39476913的博客 784

HarmonyOS上如何实现自定义控件的功能

来源 |HarmonyOS开发者 LinearLayout又称作线性布局,是一种非常常用的布局。正如它的名字所描述的一样,这个布局会将它所包含的控件在线性方向上依次排列。既然是线性排列,肯定就不仅只有一个方向,这里一般只有两个方向:水平方向和垂直方向。 但在实际开发中,为了呈现更好的视觉体验和交互效果,往往需要在LinearLayout外有其他的布局,比如下图这个手表应用中,在LinearLayout最外侧有个圆环。那么这一效果的呈现,在HarmonyOS上如何实现呢? 首先,为了...

HarmonyOS技术社区 2954

从零到一:NI USB-8506 LIN通讯的驱动安装与硬件调试全攻略

本文详细介绍了NI USB-8506 LIN通讯设备的驱动安装与硬件调试全流程,包括硬件准备、驱动下载与配置、NI MAX设置及常见问题解决方案。通过实战应用与性能优化技巧,帮助用户快速掌握LIN通讯技术,适用于车载数据记录和自动化测试等场景。

weixin_28273593的博客 927

基于React Native鸿蒙跨平台(如 SafeAreaView、View、Text、TouchableOpacity、 等),基于HarmonyOS API 24 确保在鸿蒙系统上的兼容性

常量用来定义程序所依赖的一组值,例如默认配置文件名。 好的做法是将所有常量集中放在包中的一个文件内。举个例子,Django 采用的就是这 种方法。一个名为 settings.py 的模块提供所有常量,如下所示:SQL_USER = ‘tarek’ SQL_PASSWORD = ‘secret’ SQL_URI = ‘postgres://%s:%s@localhost/db’ % ( SQL_USER, SQL_PASSWORD ) MAX_THREADS = 4 另一种方法是使用可以被 ConfigPar

2401_86113894的博客 635

antiSMASH安装与使用

antiSMASH本地安装 简要: antiSMASH的本地安装需要安装很多的依赖包,本文章使用conda辅助安装 参考: 官方:https://docs.antismash.secondarymetabolites.org/install/ 文章:http://blog.sciencenet.cn/blog-3416913-1240614.html 依赖包下载 conda install -y diamond=0.8.36 conda install -y fasttree=2.1.9 conda ins

Curry_chenhu的博客 7226

Class AB OPA STB仿真相位异常:从corner case到碰撞电离的排查与规避

本文深入分析了Class AB运算放大器(OPA)在STB稳定性仿真中,特定工艺角(corner case)下出现相位从0°开始的异常现象。排查发现,其根本原因在于高Vds引发的碰撞电离效应,通过衬底和电源网络引入了隐藏的正反馈通路。文章对比了修改衬底连接与优化电路降低Vds两种解决方案,并基于工程实践推荐了代价更小、兼容性更好的电路优化方案,成功规避了问题并完成流片验证。

grape的博客 639

鸿蒙Next应用界面设计:国际化最佳实践

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)在应用国际化界面设计方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在全球化的浪潮下,鸿蒙Next应用面临着来自不同语言和文化背景用户的考验。一个出色的国际化界面设计不仅能提升用户体验,还能助力应用在全球市场中脱颖而出。

same4869的博客 1963

Windows Docker Desktop部署MaxKB详细教程

MaxKB(Max Knowledge Base)是一款基于大语言模型(LLM)和检索增强生成(RAG)技术的开源知识库问答系统,旨在帮助企业、教育机构及研究组织高效管理知识并提供智能问答服务。

猿小白的博客 1376

基于React Native鸿蒙跨平台 HarmonyOS ArkTS API 24 核心样式属性在鸿蒙系统中会被精准转换为ArkUI的布局属性

在企业考勤管理体系中,外勤打卡是移动办公场景下的核心功能模块,其对位置信息记录、签到签退状态闭环、跨端数据同步有着严苛要求。鸿蒙系统的分布式全场景能力为企业移动办公应用的多终端部署提供了底层支撑,而React Native凭借“一次开发、多端运行”的技术特性,成为这类外勤打卡应用跨端开发的核心技术底座。本文将从外勤打卡状态管理、空值安全处理、位置信息适配到鸿蒙跨端兼容的底层实现,全方位拆解这款外勤打卡应用的技术架构,剖析React Native与鸿蒙生态深度融合的关键技术要点。

2401_86113894的博客 817

【云原生】Docker可视化工具Portainer使用详解

Docker可视化工具Portainer使用详解

congge 1万+

AI上推荐 之 逻辑回归模型与GBDT+LR(特征工程模型化的开端)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 8256

HarmonyOS实战:一招搞定保存图片到相册

保存图片功能几乎是每个应用程序必备的功能之一,当用户遇到喜欢的图片时可以保存到手机相册。那么在鸿蒙中保存图片是否也需要申请用户存储权限以及如何将图片保存到相册,本文将详细讲述怎么保存网络图片,指定布局生成图片保存至相册的功能实现。对比 Android 或 iOS 来说,鸿蒙在实现功能上相对简单,比较容易上手。但是鸿蒙对于用户权限的获取要求比较严格,正式上线一般都需要使用系统提供的安全组件访问应用程序的相册或存储,日常开发中需要十分注意,以免影响项目的正常上线。

jiakuize2291的博客 4213

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Valdi 和鸿蒙(HarmonyOS)的对比

维度Valdi使用语言标准 TypeScript + JSX定制 ArkTS(TS 方言)编译输出iOS/Android/macOS 原生代码HarmonyOS 字节码依赖运行时C++ Runtime + 原生框架性能取向极致原生性能平衡性能与生态一致性生态目标跨平台(移动 + 桌面)多设备(手机 + IoT + 车机)适用开发者Web/前端/跨平台开发者系统开发/鸿蒙生态开发者。

lpfasd123的博客 1195

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

鸿蒙系统导航栏,HarmonyOS三方件开发指南(18)-Flexbox流式布局组件

引言上一篇给大家介绍底部导航栏的组件使用及开发指南,本篇将给大家带来另一个鸿蒙三方件的是实现:Flexbox,何为Flexbox,如果对Java的Swing比较熟悉的话一定不会陌生,就是控件根据ViewGroup的宽,自动的往右添加,如果当前行剩余空间不足,则自动添加到下一行。有点所有的控件都往左飘的感觉,第一行满了,往第二行飘~所以也叫流式布局。鸿蒙并没有提供流式布局,但是某些场合中,流式布局还...

weixin_42298507的博客 1818

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

React Native鸿蒙 基于HarmonyOS API 24 find/join等方法是ES6通用API,在鸿蒙系统中会被React Native框架转换为ArkTS的数组操作逻辑

元类并不是新的 Python 特性,从 Python 2.2 版开始就一直都有。不过它的语法发生了重大变化,这种变化既不向后兼容也不向前兼容。新的语法如下所示:pass在 Python 2 中,其写法必须是这样的:= typePython 2 的 class 语句不接受关键字参数,所以 Python 3 定义元类的语法会在导入时引发 SyntaxError 异常。仍然可以编写在两个 Python 版本中都能运行的元类代码,但需要做一些额外工作。

2401_86113894的博客 702

基于React Native鸿蒙跨平台(如 SafeAreaView、View、Text、TouchableOpacity、ScrollView、Modal 等),确保在鸿蒙系统上的兼容性

本文介绍了一款基于React Native开发的月度考勤统计应用,通过TypeScript构建强类型数据模型,实现员工-统计周期-多维度数值的三层关联。应用采用React Hooks进行状态管理,支持手动录入与自动生成双重数据来源,并适配鸿蒙系统跨设备协同能力。核心功能包括:数据录入表单的跨端兼容处理、定时自动生成统计数据、严格的数据校验机制等。通过StyleSheet统一管理UI样式,确保在鸿蒙设备上的原生渲染效果。该方案充分利用React Native"一次开发、多端运行"的特性,满

xiaoqi922的博客 557

基于HarmonyOS API 24 鸿蒙跨平台handleCheckOut函数中对签退时间的更新是核心业务逻辑,该逻辑在鸿蒙系统中能够稳定运行的关键在于对象解构赋值的跨端一致性

在企业数字化管理的大趋势下,员工考勤打卡类应用需要兼顾时间记录的精准性、数据管理的稳定性以及多终端的适配能力。鸿蒙系统的分布式全场景架构为企业办公应用的跨端部署提供了核心支撑,而React Native则凭借“一次开发、多端运行”的技术特性,成为这类办公应用跨端开发的最优解。本文将从数据模型设计、核心考勤逻辑实现、UI适配到鸿蒙跨端兼容的底层逻辑,全方位拆解这款上班打卡应用的技术架构,剖析React Native与鸿蒙生态融合的关键技术要点。

2401_86113894的博客 894

基于React Native鸿蒙跨平台 HarmonyOS ArkTS API 24 ,确保在鸿蒙系统上的兼容性

在企业人力资源管理体系中,月度考勤统计是量化员工出勤行为、核算薪酬福利的核心环节,其核心诉求在于数据精准性、多维度统计能力、跨终端数据展示适配,同时需支持手动录入与自动生成的双重数据来源。鸿蒙系统的分布式全场景能力为企业级数据统计类应用提供了跨设备协同的底层支撑,而React Native凭借“一次开发、多端运行”的技术特性,成为月度考勤统计这类数据密集型轻应用跨端开发的最优选择。

2401_86113894的博客 432

鸿蒙开发之android开发人员指南《基础知识》

基于华为鸿蒙未来可能不再兼容android应用,推出鸿蒙开发系列文档,帮助android开发人员快速上手鸿蒙应用开发。

m0_71524094的博客 1357

鸿蒙开发(五)鸿蒙UI开发概览

从用户角度来讲,一个软件拥有好看的UI,那是锦上添花的事情。再精确的算法,再厉害的策略,最终都得通过UI展现给用户并且跟用户交互。那么,本篇一起学习下鸿蒙开发UI基础知识,认识下各种基本控件以及使用方式。

zhaojun的博客 2644

[HarmonyOS Next示例代码] 鸿蒙 - 基于原生能力的无障碍模式

本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。

qq_23068089的博客 1068
上一篇: 自定义View控件流程是怎样的?(2),秋招现场面试
下一篇: 芜湖!Github爆赞的Java全栈笔记太香了,学习面试齐飞,2024年最新我的头条面试经历分享
普通网友
博客等级 码龄5年 4697粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值