本文是研讨官方core-ktx库的第四篇文章,旨在探究该库中有哪些工具类或办法能够进步咱们的开发功率

已更新的系列文章:

你需求了解的官方core-ktx库能对开发带来哪些便当1

官方core-ktx库能对富文本Span开发带来哪些便当?

官方core-ktx库能对SparseArray系列、Pair开发带来哪些便当?

本篇文章主要是研讨core-ktx库中graphics包下供给的关于View制作、BitmapRectColor等操作的一系列扩展API,看看能为咱们开发带来哪些便当。

DrawableBitmap相互间转化

Bitmap.toDrawable(Resource)完成BitmapDrawable

超好用的官方core-ktx库,了解一下~

Bitmap定义了一个快速转化成BitmapDrawable的扩展办法,仍是少写了一些模板代码的。

Drawable.toBitmap()完成Drawable转化成Bitmap目标

超好用的官方core-ktx库,了解一下~

Drawable转化成Bitmap应该是咱们日常开发中常见的场景,这儿官方库直接给咱们供给了一个toBitmap()的API,十分的便利,下面咱们来简单介绍下其中的原理:

  1. 首要判别当时Drawable的类型是否为BitmapDrawable,假如是直接调用其getBitmap()就能直接拿到Bitmap目标,然后依据传入的宽高进行一定比例的紧缩转化后进行返回;

  2. 假如不是BitmapDrawable,就首要需求创立一个Bitmap目标,能够理解为一个"画布",然后接着创立一个Canvas目标并传入之前创立的Bitmap目标,这样咱们就能够利用Canvas供给的制作API在Bitmap这个"画布"上作画了,接下来直接调用Drawable的draw()办法并传入Canvas,就能够将Drawable中的显现内容制作到咱们一开始创立的Bitmap上了,这样就完成了DrawableBitmap的转化

Bitmap系列

简化对Bitmap的制作操作

咱们先看下日常开发中,咱们怎么在Bitmap中制作一点东西:

private fun test4(bitmap: Bitmap) {
    val canvas = Canvas(bitmap)
    canvas.apply { 
        //进行一些制作操作
        drawLine(0f, 0f, 100f, 100f, Paint())
    }
}

有些繁琐,看下官方库给咱们供给了什么便当的扩展完成:

超好用的官方core-ktx库,了解一下~

协助咱们创立好Canvas目标,而且办法参数是一个接收者为Canvas的函数类型,这意味咱们能够直接在外部传入的lambda中进行制作操作:

private fun test4(bitmap: Bitmap) {
    bitmap.applyCanvas {
        //进行一些制作操作
        drawLine(0f, 0f, 100f, 100f, Paint())
    }
}

简化Bitmap创立

1.createBitmap()创立指定巨细和像素格式的Bitmap

超好用的官方core-ktx库,了解一下~

仍是简化了创立Bitmap的操作,虽然很小。

2.scale()缩放(紧缩)Bitmap

超好用的官方core-ktx库,了解一下~

这个也是咱们常用的经过下降分辨率紧缩Bitmap巨细的一种办法。

操作Bitmap中的像素点

1.Bitmap.get(x: Int, y: Int)获取指定方位的像素点RGB值

超好用的官方core-ktx库,了解一下~

经典的运算符重载函数,代码中能够直接val pointRGB = bitmap[100, 100]运用。

2.Bitmap.set()设置某个点的RGB像素值

超好用的官方core-ktx库,了解一下~

相同也是个运算符重载办法,代码中直接bitmap[100, 100] = Color.RED运用。

3.Bitmap.contains()判别指定方位点是否落在Bitmap

超好用的官方core-ktx库,了解一下~

运算符重载办法,直接Point(100, 100) in bitmap运用

color系列

普通扩展属性获取色彩的A、R、G、B

超好用的官方core-ktx库,了解一下~

运用如下:

private fun test10(@ColorInt value: Int) {
    val a = value.alpha
    val r = value.red
    val g = value.green
    val b = value.blue
}

解构获取色彩的A、R、G、B

超好用的官方core-ktx库,了解一下~

带有operator修饰componenX便是解构办法,X和参数声明的方位一一对应:

private fun test10(@ColorInt value: Int) {
    val (a, r, g, b) = value
}

向咱们常见的data classHashMap都完成了相似的解扩展。

转化色彩Color目标

1.Int.toColor()整形色彩转化Color目标

超好用的官方core-ktx库,了解一下~

2.String.toColorInt()完成字符串转Color目标

超好用的官方core-ktx库,了解一下~

这个应该比较常用,直接"#ffffff".toColorInt()即可

Rect系列

解构获取左、上、右、下的值

超好用的官方core-ktx库,了解一下~

熟悉的解构,运用和上面相同(RectF也相同供给了相同的解构办法),如下:

private fun test10(rect: Rect) {
    val (left, top, right, bottom) = rect
}

缩放Rect范围

下面是扩大Rect范围的API:

超好用的官方core-ktx库,了解一下~
超好用的官方core-ktx库,了解一下~

超好用的官方core-ktx库,了解一下~

运用如下:

private fun test10(rect: Rect) {
    val rect1 = rect + rect
    val rect2 = rect + 10
    val rect3 = rect + Point(100, 200)
}

相同也供给了minus()缩减Rect范围

Rect间取交集、并集等

超好用的官方core-ktx库,了解一下~

超好用的官方core-ktx库,了解一下~

判别某个点是否落在Rect

超好用的官方core-ktx库,了解一下~

运用:Point(11, 11) in rect

Point、PointX系列

下面的扩展办法无非便是解构、经过运算符重载操控Point方位,上面现已讲了一大堆这样的运用,我们走马观花的看下就行,有个印象即可。

经典的解构取值办法

超好用的官方core-ktx库,了解一下~

操作Point的方位

超好用的官方core-ktx库,了解一下~

超好用的官方core-ktx库,了解一下~

总结

上面的内容现已把graphics包下供给的扩展工具讲的七七八八了,我们主要是有个印象就行,运用的时候能想起来用更好,假如需求具体了解的请直接参阅该包下的源码即可。

关于探索官方core-ktx库的还剩余大概最终一篇文章讲解了,期望能够在这个系列中带给我们一些协助,供给我们的开发功率。而且经过学习官方库中的封装思路,也相同会给我们日常开发中小优化带来启发。

我正在参加技能社区创作者签约方案招募活动,点击链接报名投稿。