常用工具Tools

dp px sp

px 像素
dp -> density-independent pixel(密度无关像素) dp 是一种基于设备独立像素的单位,它会根据设备的屏幕密度进行自适应缩放,以确保在不同密度的设备上显示相同大小的视图元素。
sp -> scaled pixels(缩放像素)sp 用于设置文本的大小,会根据用户的字体大小偏好进行缩放,适合用于用户界面中的文本大小设置。

px(像素)/密度=dp(长度) dp x 密度 = px
sp(字体) ——>px(像素)
①px:指像素,是指基本原色素及其 灰度 的基本编码。
②dp: 安卓 开发时的 长度单位(一个圆点里面有多少个像素)
③sp:与缩放无关的抽象像素,是字体单位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//density 得到屏幕的密度

/**px 转化为 dp*/
fun px2dp(px:lnt):Int{
return (px / context.resources.displayMetrics.density).tolnt()
}

//--------------------------------------------------------------

/**dp 转化为 px*/
fun dp2px(dp:lnt) = context.resources.displayMetrics.density * dp

//↓ 可以直接给 View / Context 加扩展
fun View.dp2px(dp:lnt):Int{
return (context.resources.displayMetrics.density*dp).tolnt()
}

fun Context.dp2px(dp:Int):Int{
return (resources.displayMetrics.density * dp).toInt()
}

//--------------------------------------------------------------


/**sp 转化为 px*/
//也可以直接给 Context 加扩展函数
fun sp2px(sp:Float):Float{
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,sp,context.resources.displayMetrics)
}

时间

1
2
3
fun time():String{
return SimpleDateFormat("yyyy.MM.dd", Locale.CHINA).format(Date())
}

常量

drawText 绘制文字居中公式

1
2
3
4
5
6
7
//居中公式
val sx = (width-mPaint.measureText(mText))/2
val metrics = mPaint.fontMetrics
val sy = (height- metrics.bottom - metrics.top)/2

mPaint.color = Color.GRAY
canvas?.drawText(mText,sx,sy.toFloat(),mPaint)

Context

程序创建时就提供一个 Context 对象

1
2
3
4
5
6
7
//要在 Manifest 文件中
class MyApplication:Application() {
override fun onCreate() {
super.onCreate()
Helper.mContext = WeakReference(applicationContext)
}
}
1
2
3
object Helper {
lateinit var mContext:WeakReference<Context>
}

//使用 Context
Helper.mContext.get()!!

Bitmap «» ByteArray

图片资源类型转化

Bitmap -> ByteArray

bitmap.compress() 方法用于将Bitmap对象压缩为一个输出流中的数据,该方法包含三个参数:

  1. format:Bitmap.CompressFormat:表示压缩的格式
  • Bitmap.CompressFormat.PNG:PNG格式,无损压缩,支持透明度
  • Bitmap.CompressFormat.JPEG:JPEG格式,有损压缩,不支持透明度
  • Bitmap.CompressFormat.WEBP:WebP格式,有损或无损压缩,支持透明度
  1. quality:Int:表示压缩的质量,取值范围为0-100,值越大表示质量越高,文件大小也越大。
  • 该参数只对JPEG格式有效,对PNG和WEBP格式无效。
  1. stream:OutputStream:表示输出流,用于存储压缩后的数据。
  • 在示例代码中,我们使用ByteArrayOutputStream作为输出流,将压缩后的数据存储在一个ByteArray中。

Bitmap -> ByteArray

1
2
3
4
5
6
7
fun bitmapToByteArray(bitmap: Bitmap):ByteArray{
ByteArrayOutputStream().use { baos ->
bitmap.compress(Bitmap.CompressFormat.JPEG, quality: 100,baos)
return baos.toByteArray()
}
}

ByteArray -> Bitmap

BitmapFactory.decodeByteArray (byteArray, offset, length)
是一个静态方法,用于从给定的字节数组中创建一个Bitmap对象

ByteArray -> Bitmap

1
2
3
fun byteArrayToBitmap(byteArray: ByteArray): Bitmap {
return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
}

View -> Bitmap

1
2
3
4
5
6
7
8
9
10
suspend fun convertViewToBitmap(view: View):Bitmap = withContext(Dispatchers.IO){
//创建空的画布 Bitmap
val bitmap = Bitmap.createBitmap(view.width,view.height,Bitmap.Config.ARGB_8888)
//让 canvas 绘制的内容画在指定的 bitmap 上
val canvas = Canvas(bitmap)
view.draw(canvas)

//返回 bitmap 画布
bitmap
}

保存 Bitmap 到文件

在将Bitmap图像存储到手机文件中时,通常会使用压缩来减小文件的大小,节省存储空间并提高存储和加载效率。在上面的代码中,使用了bitmap.compress()方法将Bitmap图像压缩为JPEG格式,并指定压缩质量为100(最高质量)。

1
2
3
4
5
6
7
8
9
10
11
12
13
suspend fun saveBitmap(bitmap: Bitmap):String = withContext(Dispatchers.IO){
//文件名
val name = TimeUtils.timeName()
//文件路径
val path = "${Helper.mContext.get()!!.filesDir}/$name"

//创建并写入
BufferedOutputStream(FileOutputStream(path)).use {
//先压缩 后存储
bitmap.compress(Bitmap.CompressFormat.JPEG,100,it)
}
path
}

Bitmap 缩略图

1
2
3
4
5
6
7
8
9
suspend fun scaleBitmap(mBitmap: Bitmap,scale: Float):Bitmap = withContext(Dispatchers.IO){
Bitmap.createScaledBitmap(
mBitmap,
(mBitmap.width * scale).toInt(),
(mBitmap.height * scale).toInt(),
true
)

}
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 Annie
  • Visitors: | Views:

嘿嘿 请我吃小蛋糕吧~

支付宝
微信