本文介绍: 基于Matrix,控制Bitmap的setRectToRect的目标RectF的宽高。从很小的宽高开始,不断迭代增加setRectToRect的目标RectF的宽高,每次迭代加上一定时延,实现Matrix基础上的动画。文章浏览阅读180次。【代码】Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin。Android矩阵setRectToRect裁剪Bitmap原图Matrix放大,mapRect标记中心区域,Kotlin-CSDN博客。
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一样):
最终动画结束:
原文地址:https://blog.csdn.net/zhangphil/article/details/135980821
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_68303.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。