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.withContextclass MainActivity : AppCompatActivity() {private var iv: ImageView? = nullprivate var result: ImageView? = nulloverride 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 / stepval deltaH: Float = height / stepCoroutineScope(Dispatchers.IO).launch {var w = 0fvar h = 0ffor (i in 0 until step.toInt()) {delay(delayTime)w += deltaWh += deltaHval 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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/454863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发送get请求并且发送请求头(header),java实现

发送get请求时,发送请求头(Header)中的内容 方便第二次调用其他url时传递参数,例如userCode或者租户编码 调用方式 Autowired private HttpServletRequest request;先注入HttpServletRequestpublic xxx xxx(){String url &quo…

15.1 项目实践_OA系统

15.1 项目实践_OA系统 1. 需求说明及环境准备1.1 需求说明1.2 环境准备1.3 开发模式_MVC架构模式2. 关键代码解析2.1 整合MyBatis1. 依赖2. 配置mybatis-config.xml3. Mybatis工具类2.2 RBAC2.3 用户登录1. 需求说明及环境准备 1.1 需求说明

visio对任意形状进行任意角度旋转调整

在使用VISIO进行绘图时,可能需要对任意的形状进行旋转,让其达到一致。如下图所示,灰色矩形与直线要保持一致,而实际在绘制矩形时,成水平朝向。需要对矩形进行调整,将其与直线倾斜保持一致。具体步骤如下&am…

Python 数据分析(PYDA)第三版(六)

原文:wesmckinney.com/book/ 译者:飞龙 协议:CC BY-NC-SA 4.0 十二、Python 建模库介绍 原文:wesmckinney.com/book/modeling 译者:飞龙 协议:CC BY-NC-SA 4.0 此开放访问网络版本的《Python 数据分析第三版…

笔记---贪心---排序不等式,绝对值不等式

排序不等式 AcWing.913.排队打水 有 n n n 个人排队到 1 1 1 个水龙头处打水,第 i i i 个人装满水桶所需的时间是 t i t_{i} ti​,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小? 输入格式 第一行包含整数 n n n。 第二…

2024 年十大 Vue.js UI 库

Vue.js 是一个流行的 JavaScript 框架,它在前端开发者中越来越受欢迎,以其简单、灵活和易用性而闻名。 Vue.js 如此受欢迎的原因之一是它拥有庞大的 UI 库生态系统。 这些库为开发人员提供了预构建的组件和工具,帮助他们快速高效地构建漂亮…

SpringBoot:配置相关知识点

SpringBoot:多环境配置 配置知识点demo:点击查看LearnSpringBoot02 点击查看更多的SpringBoot教程 一、SpringBootApplication SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用,运行这个类的main方法来…

YOLOv8改进 | 检测头篇 | 重参数化检测头RepHead解决困难样本检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是RepHead,该检测头为我独家全网首发,该检测头由重参数化模块组成,加大对于特征学习的能力,却可以不增加GFLOPs(仅仅略微提升)从而不影响模型的推理速度和性能,保持较高的FPS能力,牺牲了少量GFLOPs的情况下确提高了模型的特征提…

hexo和github.io博客的搭建

简要: 最近在牛客网上看到有很多应届毕业生大佬的求职简历上都写上了自己的博客地址,并且在acwing上看到图图佬,铅笔佬也有自己的博客地址,大部分都采用了自己搭建博客的方式,而不是用脏乱差的csdn来写博客。所以我也采…

NLP_Bag-Of-Words(词袋模型)

文章目录 词袋模型用词袋模型计算文本相似度1.构建实验语料库2.给句子分词3.创建词汇表4.生成词袋表示5.计算余弦相似度6.可视化余弦相似度 词袋模型小结 词袋模型 词袋模型是一种简单的文本表示方法,也是自然语言处理的一个经典模型。它将文本中的词看作一个个独立…

MongoDB的操作和理解

什么是MongoDB? MongoDB:基于分布式文件存储的数据库由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 Mo…

多线程-线程池(一分钟快速了解)

目录 1.什么是线程池 2.标准库中的线程池 2.1各个参数什么意思 int corePoolSize: int maximumPoolSize: keepAliveTime: BlockingQueue workQueue: ThradFactory threadFactory :线程工厂 RejectedExecutionHandler handler:&…