记录:图片放大回弹逻辑

102 阅读1分钟
private fun matrixReset() {
    if (model != BackgroundPackInfo.MODEL_ORIGIN)
        return
    val initRect = RectF()
    val viewRect = RectF(0f, 0f, canvasWidth.toFloat(), canvasHeight.toFloat())
    targetMatrix.mapRect(initRect, mTextureDrawRectF)
    //如果宽高都比view的小,则复原
    if (initRect.width() <= canvasWidth && initRect.height() <= canvasHeight) {
        animateMatrix.reset()
        animateMatrix()
    } else {
        animateMatrix.set(targetMatrix)
        val minusRect = RectF(
            initRect.left - viewRect.left,
            initRect.top - viewRect.top,
            initRect.right - viewRect.right,
            initRect.bottom - viewRect.bottom
        )
        var transX = 0f
        var transY = 0f
        if (minusRect.left > 0) {
            transX = -minusRect.left
        } else {
            if (minusRect.right < 0) {
                transX = -minusRect.right
            }
        }
        if (minusRect.top > 0) {
            transY = -minusRect.top
        } else {
            if (minusRect.bottom < 0) {
                transY = -minusRect.bottom
            }
        }
        if (viewRect.width() < initRect.width() && viewRect.height() < initRect.height()) {
            //3:如果图片处于放大状态,且对应边都比view的边大
            //1):如果图片都覆盖view,则不处理;
            //2):否则,图片平移到一角对齐至view;
            animateMatrix.postTranslate(transX, transY)
        } else if (viewRect.width() <= initRect.width()) {
            //2:如果图片处于放大状态,但是仅有图片的宽比view的宽大,那么图片的高居中,高对应的边对齐至view.
            //center;
            transY =
                ((viewRect.top + viewRect.bottom) / 2) - (initRect.top + initRect.bottom) / 2
            animateMatrix.postTranslate(transX, transY)
        } else if (viewRect.height() <= initRect.height()) {
            //2:如果图片处于放大状态,但是仅有图片的高比view的高大,那么图片的宽居中,宽对应的边对齐至view.
            transX =
                ((viewRect.right + viewRect.left) / 2) - (initRect.right + initRect.left) / 2
            animateMatrix.postTranslate(transX, transY)
        }
        animateMatrix()
    }
}
```
```