自定义View控件流程是怎样的?(1),HarmonyOS鸿蒙面试回忆录

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

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

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

img
img
htt

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

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

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

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

测量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中相对应的接口,并且处理相应的回调方法。
  • 除手势之外,如果有移动之类的情况还需要让滑动的动画显示得比较平滑。动画应该是平滑的开始和结束,而不是突然消失突然开始。建议使用属性动画

优化自定义View

在上述步骤结束之后,其实一个较为完善的自定义控件已经出来。接下来需要确保自定义控件运行得流畅,官方说法是:为了避免控件体验迟缓,确保动画尽可能保持每秒60帧效果。

官网给出的优化建议:

1、避免不必要的代码
2、在onDraw()方法中不应该有会导致垃圾回收的代码
3、尽可能少让onDraw()方法调用,大多数onDraw()方法调用都伴随调用invalidate(),所以不是必须,不要调用invalidate()方法。

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
cn/DIvKma]( )** **Android 八大知识体:[https://qr18.cn/CyxarU]( )** **Android 核心笔记:[https://qr21.cn/CaZQLo`]( )**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值