Android verwendet setRectToRect, um eine RectF-Animation mit Bitmap-Skalierung basierend auf der Matrix-Matrixskala Kotlin (1) zu implementieren.

Android verwendet setRectToRect, um eine RectF-Animation mit Bitmap-Skalierung basierend auf der Matrix-Matrixskala Kotlin (1) zu implementieren.

 

Steuern Sie basierend auf der Matrix die Breite und Höhe des Ziel-RectF von setRectToRect von Bitmap. Ausgehend von einer sehr kleinen Breite und Höhe werden die Breite und Höhe des Ziel-RectF von setRectToRect iterativ erhöht, wodurch bei jeder Iteration eine gewisse Verzögerung hinzugefügt wird, um eine auf Matrix basierende Animation zu erreichen.

 

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)
                }
            }
        }
    }
}

 

 

 

 

Es gibt zwei ImageViews oben und unten. Die ImageView unten zeigt eine Bitmap an, die kontinuierlich von klein nach groß vergrößert wird (dasselbe wie die Bitmap, die von der ImageView oben angezeigt wird):

bdf0f57aeb484a9fb7cd8474df97bfb3.png

9d77161a99c1414b9cbd2857f69263a6.png

 

Die letzte Animation endet: 

0c483f2507db4e6192fa5f4ebb9c8d3b.png

 

 

 

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

Die Android-Matrix setRectToRect schneidet die ursprüngliche Bitmap-Matrix zu und vergrößert sie, mapRect markiert den mittleren Bereich und der Kotlin-CSDN-Blogartikel wurde 180 Mal aufgerufen. [Code] Android-Matrix setRectToRect schneidet die Bitmap-Originalbildmatrix zu und vergrößert sie, mapRect markiert den mittleren Bereich, 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

 

Ich denke du magst

Origin blog.csdn.net/zhangphil/article/details/135980821
Empfohlen
Rangfolge