Biblioteca oficial de core-ktx súper fácil de usar, aprenda sobre ella ~

Este artículo es una investigación oficial core-ktx库的第四篇文章, con el objetivo de explorar qué clases de herramientas o métodos en la biblioteca pueden mejorar nuestra eficiencia de desarrollo.

Serie de artículos actualizada:

¿Qué ventajas puede aportar la biblioteca oficial core-ktx al desarrollo que necesita saber?

¿Qué conveniencia puede aportar la biblioteca oficial core-ktx al desarrollo de tramos de texto enriquecido?

¿Qué conveniencia puede aportar la biblioteca oficial core-ktx al desarrollo de la serie SparseArray y Pair?

Este artículo estudia principalmente una serie de API extendidas proporcionadas bajo el paquete en la core-ktxbiblioteca para dibujar, , y otras operaciones para ver qué conveniencia puede aportar a nuestro desarrollo.graphicsViewBitmapRectColor

DrawableBitmapconversión hacia y desde

Bitmap.toDrawable(Resource)darse cuenta de BitmapvueltaDrawable

imagen.png

Para Bitmapdefinir un método de extensión que se convierta rápidamente en BitmapDrawable, o escriba un código de plantilla menos.

Drawable.toBitmap()Implementar Drawablela conversión a Bitmapobjeto

imagen.png

DrawableLa conversión Bitmapdebería ser un escenario común en nuestro desarrollo diario. Aquí, la biblioteca oficial nos proporciona directamente una toBitmap()API, lo cual es muy conveniente. Presentemos brevemente el principio:

  1. Primero determine si el Drawabletipo actual es BitmapDrawable, si se llama directamente, getBitmap()puede obtener el Bitmapobjeto directamente y luego realizar una cierta proporción de conversión de compresión de acuerdo con el ancho y la altura entrantes, y luego regresar;

  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())
    }
}

有些繁琐,看下官方库给我们提供了什么便利的扩展实现:

imagen.png

帮助我们创建好Canvas对象,并且方法参数是一个接收者为Canvas的函数类型,这意味我们可以直接在外部传入的lambda中进行绘制操作:

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

简化Bitmap创建

1.createBitmap()创建指定大小和像素格式的Bitmap

imagen.png

还是简化了创建Bitmap的操作,虽然很小。

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

imagen.png

这个也是我们常用的通过降低分辨率压缩Bitmap大小的一种方式。

操作Bitmap中的像素点

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

imagen.png

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

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

imagen.png

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

3.Bitmap.contains()判断指定位置点是否落在Bitmap

imagen.png

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

color系列

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

imagen.png

使用如下:

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

imagen.png

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

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

向我们常见的data classHashMap都实现了类似的解扩展。

转换颜色Color对象

1.Int.toColor()整形颜色转换Color对象

imagen.png

2.String.toColorInt()实现字符串转Color对象

imagen.png

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

Rect系列

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

imagen.png

熟悉的解构,使用和上面一样(RectF也同样提供了相同的解构方法),如下:

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

缩放Rect范围

下面是扩充Rect范围的API:

imagen.png imagen.png

imagen.png

使用如下:

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

同样也提供了minus()缩减Rect范围

Rect间取交集、并集等

imagen.png

imagen.png

判断某个点是否落在Rect

imagen.png

使用:Point(11, 11) in rect

Point、PointX系列

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

经典的解构取值方法

imagen.png

操作Point的位置

imagen.png

imagen.png

总结

上面的内容已经把graphics包下提供的扩展工具讲的七七八八了,大家主要是有个印象就行,使用的时候能想起来用更好,如果需要详细了解的请直接参考该包下的源码即可。

core-ktxSobre el último artículo sobre la exploración de la biblioteca oficial , espero poder brindarle alguna ayuda en esta serie y mejorar la eficiencia de su desarrollo. Y al aprender las ideas de empaque en la biblioteca oficial, también inspirará el desarrollo diario de optimización pequeña y mediana de todos.

Estoy participando en el reclutamiento del programa de firma de creadores de la Comunidad Tecnológica de Nuggets, haga clic en el enlace para registrarse y enviar .

Supongo que te gusta

Origin juejin.im/post/7121718556546482190
Recomendado
Clasificación