Android初步进阶之对Drawable进行缩放

为了方便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)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值