为了方便Drawable的使用,这里对Drawable的缩放进行了封装。

基本的使用可以选择自己是要使用缩放比例还是使用缩放后的尺寸,这两种方式。

废话不多说,Kotlin封装的代码如下:

import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Matrix
import android.graphics.PixelFormat
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable

/**
 * 对Drawable资源进行缩放
 */
class ZoomDrawable {
    var old_width:Int? = null
    var old_height:Int? = null
    /**
     * 对要求的drawable资源进行缩放或者放大,use_scale为true时使用缩放比例
     */
    fun ZoomDrawableImage(drawable:Drawable, user_scale:Boolean, new_width:Float?, new_height:Float?, scale_width:Float?, scale_height:Float?):Drawable{
        old_width = drawable.intrinsicWidth
        old_height = drawable.intrinsicHeight
        val old_bitMap:Bitmap = DrawableToBitMap(drawable)
        val matrix:Matrix = Matrix()
        if(user_scale){
            matrix.postScale(scale_width!!, scale_height!!)
        }else
        {
            val scale_width_create:Float = new_width!!/old_width!!
            val scale_height_create:Float = new_height!!/old_height!!
            matrix.postScale(scale_width_create, scale_height_create)
        }
        val newBitMap:Bitmap = Bitmap.createBitmap(old_bitMap, 0, 0, old_width!!, old_height!!, matrix, true)
        return BitmapDrawable(newBitMap)
    }
    /**
     * 将Drawable转换为BitMap
     */
    private fun DrawableToBitMap(drawable: Drawable):Bitmap{
        val width:Int = drawable.intrinsicWidth  //获取宽度、高度
        val height:Int = drawable.intrinsicHeight
        val config:Bitmap.Config =  if(drawable.opacity != PixelFormat.OPAQUE) Bitmap.Config.ARGB_8888 else Bitmap.Config.RGB_565//获取颜色格式
        val bitmap:Bitmap = Bitmap.createBitmap(width, height, config) //创建BitMap流
        val canvas: Canvas = Canvas(bitmap) //绘制
        drawable.setBounds(0, 0, width, height)
        drawable.draw(canvas)
        return bitmap
    }
}

调用第一个函数进行缩放,返回Drawable类型数据。使用示例如下:

  • 使用缩放比例
zoomDrawable.ZoomDrawableImage(icon, true, null, null, 1.5f, 1.5f)

在这里插入图片描述

  • 使用缩放后的尺寸
zoomDrawable.ZoomDrawableImage(icon, false, 100f, 100f, null, null)

在这里插入图片描述

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐