Android----Matrix-与坐标变换,2024网易Android高级面试题总结

本文深入探讨了Android中Matrix的使用,特别是在坐标变换中的作用。详细解析了Matrix的初始化,包括native层的初始化,以及如何设置为单位矩阵。文章还介绍了矩阵的setScale、preScale和postScale方法的区别,强调了它们在矩阵乘法中的不同操作。此外,文章还提及了Matrix在Android面试中的重要地位。
摘要由CSDN通过智能技术生成

obj->reset();
return reinterpret_cast(obj);
}

Java层初始化要点如下:

  • Matrix构造器在native创建了一个SkMatrix对象,并通过reinterpret_cast强制转换为long赋值给Java层的native_instance

  • MatrixJava层其实没有太多操作,真正完成任务的实体是native层的SkMatrixSKMatrix是 Skia 图形引擎提供的用于完成坐标变换的 3 x 3 矩阵

  • Android 8开始,使用NativeAllocationRegistry帮助回收 native 层内存。NativeAllocationRegistry绑定了Java层和native层的两个对象,并标记内存大小为 40字节,为什么是 40 个字节呢?我们在源码里寻找答案:SkMatrix.hSkMatrix.cpp

# 提示

NativeAllocationRegistry是用来帮助回收native层内存的,即当Java层对象被垃圾回收时,立即去释放Native层的内存,在CanvasBitmap等类中也有同样的机制,详见文章:《Android | 带你理解 NativeAllocationRegistry 的原理与设计思想》

3.2 native 层初始化

// SkMatrix.h

SK_BEGIN_REQUIRE_DENSE
class SK_API SkMatrix {
public:
enum {
kMScaleX, //!< horizontal scale factor
kMSkewX, //!< horizontal skew factor
kMTransX, //!< horizontal translation
kMSkewY, //!< vertical skew factor
kMScaleY, //!< vertical scale factor
kMTransY, //!< vertical translation
kMPersp0, //!< input x perspective factor
kMPersp1, //!< input y pers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值