当前位置: 首页 > news >正文

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.lryc.cn/news/294518.html

相关文章:

  • 【AI绘画+Midjourney平替】Fooocus:图像生成、修改软件(Controlnet原作者重新设计的UI+Windows一键部署)
  • Java技术栈 —— Hive与HBase
  • 【代码随想录-哈希表】有效的字母异位词
  • SQL Server之DML触发器
  • 04. 【Linux教程】安装 Linux 操作系统
  • Facebook群控:利用IP代理提高聊单效率
  • 香港倾斜模型3DTiles数据漫游
  • Go指针探秘:深入理解内存与安全性
  • Oracle12c之Sqlplus命令行窗口基本使用
  • react和antd学习笔记
  • 寒假作业2月5号
  • 滑动窗口(一)
  • 寒假 day1
  • DATAX改造支持geometry类型数据同步
  • Vue中keep-alive的作用、原理及应用场景
  • SpringBoot集成Redisson实现限流(二)
  • 【2024美赛E题】985博士解题思路分析(持续更新中)!
  • 北朝隋唐文物展亮相广西,文物预防性保护网关保驾护航
  • 回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)
  • ubuntu离线安装k8s
  • 学成在线:媒体资源管理系统(MAM)
  • 18个8年以上服务器开发经验的面试题(2)
  • 【SpringBoot】applicationContext.getBeansOfType(class)获取某一接口所有实现类,应用于策略模式
  • AJAX-入门
  • 学术写作|第二篇论文写作记录|GPT4论文润色Prompt
  • 力扣热门100题刷题笔记 - 10. 正则表达式匹配
  • 4.0 HDFS 配置与使用
  • 【实训】网络规划与部署实训
  • 相同的树[简单]
  • 02-Web应用_架构构建_漏洞_HTTP数据包_代理服务器