Android用setRectToRect实现Bitmap基于Matrix矩阵scale缩放RectF动画,Kotlin(一)

Android用setRectToRect实现Bitmap基于Matrix矩阵scale缩放RectF动画,Kotlin(一)

 

基于Matrix,控制Bitmap的setRectToRect的目标RectF的宽高。从很小的宽高开始,不断迭代增加setRectToRect的目标RectF的宽高,每次迭代加上一定时延,实现Matrix基础上的动画。

 

import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Matrix
import android.graphics.RectF
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext


class MainActivity : AppCompatActivity() {
    private var iv: ImageView? = null
    private var result: ImageView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        iv = findViewById(R.id.iv)
        result = findViewById(R.id.result)
    }

    override fun onResume() {
        super.onResume()

        result?.postDelayed({
            val bmp = BitmapFactory.decodeResource(resources, R.mipmap.mypic)
            matrixAnimScale(bmp, iv!!.width, iv!!.height)
        }, 500)
    }

    private fun matrixAnimScale(srcBmp: Bitmap, width: Int, height: Int) {
        val delayTime = 1L //动画之间的间隔。
        val step = 100f //100次缩放绘制,每步延时delayTime毫秒,总计 delayTime*step 毫秒完成动画。

        val deltaW: Float = width / step
        val deltaH: Float = height / step

        CoroutineScope(Dispatchers.IO).launch {
            var w = 0f
            var h = 0f

            for (i in 0 until step.toInt()) {
                delay(delayTime)

                w += deltaW
                h += deltaH

                val bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
                val c = Canvas(bmp)
                c.drawColor(Color.BLUE)

                val src = RectF(0f, 0f, srcBmp.width.toFloat(), srcBmp.height.toFloat())
                val dst = RectF(0f, 0f, w, h)
                val mx = Matrix()
                mx.setRectToRect(src, dst, Matrix.ScaleToFit.CENTER)
                c.drawBitmap(srcBmp, mx, null)

                withContext(Dispatchers.Main) {
                    result?.setImageBitmap(bmp)
                }
            }
        }
    }
}

 

 

 

 

上下两个ImageView,下面的ImageView展示从小到大不断放大的Bitmap(与上方的ImageView展示的Bitmap一样):

bdf0f57aeb484a9fb7cd8474df97bfb3.png

9d77161a99c1414b9cbd2857f69263a6.png

 

最终动画结束: 

0c483f2507db4e6192fa5f4ebb9c8d3b.png

 

 

 

https://zhangphil.blog.csdn.net/article/details/135961734https://zhangphil.blog.csdn.net/article/details/135961734

Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin-CSDN博客文章浏览阅读180次。【代码】Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin。https://blog.csdn.net/zhangphil/article/details/135960921

https://zhangphil.blog.csdn.net/article/details/135913218https://zhangphil.blog.csdn.net/article/details/135913218

 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-06 08:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-06 08:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-06 08:22:02       82 阅读
  4. Python语言-面向对象

    2024-02-06 08:22:02       91 阅读

热门阅读

  1. Spring Boot项目监控异常,发送邮件

    2024-02-06 08:22:02       50 阅读
  2. 【PyTorch】实现迁移学习框架DaNN

    2024-02-06 08:22:02       52 阅读
  3. seatunnel数据集成(二)数据同步

    2024-02-06 08:22:02       55 阅读
  4. Uni-app 学习笔记

    2024-02-06 08:22:02       55 阅读
  5. 【无标题】summarizations onMysql

    2024-02-06 08:22:02       51 阅读
  6. Linux服务器设置 SSH 通过密钥登录(免密登录)

    2024-02-06 08:22:02       49 阅读
  7. ubuntu22.04挂载磁盘的步骤

    2024-02-06 08:22:02       52 阅读
  8. 【RK3288 Android6 T2pro 支持移远和有方4G模块切换】

    2024-02-06 08:22:02       48 阅读
  9. ubuntu 自动挂载NFS配置

    2024-02-06 08:22:02       47 阅读
  10. Spring和Spring Boot的区别

    2024-02-06 08:22:02       47 阅读
  11. Qt应用软件【协议篇】MQTT协议介绍

    2024-02-06 08:22:02       47 阅读
  12. 算法专题:滑动窗口

    2024-02-06 08:22:02       45 阅读
  13. Python学习之路-Tornado基础:安全应用

    2024-02-06 08:22:02       42 阅读
  14. SpringMVC-响应数据

    2024-02-06 08:22:02       52 阅读