Android는 setRectToRect를 사용하여 행렬 행렬 크기, Kotlin을 기반으로 비트맵 크기 조정 RectF 애니메이션을 구현합니다. (1)

Android는 setRectToRect를 사용하여 행렬 행렬 크기, Kotlin을 기반으로 비트맵 크기 조정 RectF 애니메이션을 구현합니다. (1)

 

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/135961734 https://zhangphil.blog.csdn.net/article/details/135961734

Android 매트릭스 setRectToRect는 원본 비트맵 매트릭스를 자르고 확대하고, mapRect는 중앙 영역을 표시하며, Kotlin-CSDN 블로그 기사는 180회 조회되었습니다. [코드] Android 매트릭스 setRectToRect는 비트맵 원본 이미지 매트릭스를 잘라서 확대하고, mapRect는 Kotlin의 중앙 영역을 표시합니다. https://blog.csdn.net/zhangphil/article/details/135960921

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

 

추천

출처blog.csdn.net/zhangphil/article/details/135980821