使用ObjectAnimator时使用不同视图大小的不同目标位置

时间:2017-10-02 16:32:16

标签: android animation kotlin objectanimator

我正在尝试实现一个动画,我在其中创建ImageView的副本,缩小它并将其移动到沿曲线的另一个视图的位置。目标是当视图到达目标视图的位置时视图消失。我的动画代码如下(此问题简化了代码):

fun animate(imageViewToCopy: ImageView, targetView: ImageView) {
    // create copy of ImageView
    val copy = imageViewToCopy.createCopy()
    // draw it on the decor view (params excluded, from example code)
    activity.window.decorView.addView(copy)
    startAnimation(copy, targetView)
}

private fun startAnimation(imageView: ImageView, targetView: ImageView) {

    val dest = IntArray(2)
    targetView.getLocationOnScreen(dest)

    val targetX = dest[0]
    val targetY = dest[1]

    val disappearAnimatorY = ObjectAnimator.ofFloat(imageView, View.SCALE_Y, 1f, 0f)
    val disappearAnimatorX = ObjectAnimator.ofFloat(imageView, View.SCALE_X, 1f, 0f)
    val translatorY = ObjectAnimator.ofFloat(imageView, View.Y, targetY.toFloat())
    val translatorX = ObjectAnimator.ofFloat(imageView, View.X, targetX.toFloat())
    translatorX.interpolator = TimeInterpolator { input ->
        // create curve
        (-Math.pow((input - 1).toDouble(), 2.0) + 1f).toFloat()
    }

    AnimatorSet().apply {
        playSequentially(disappearAnimatorX, disappearAnimatorY, translatorX, translatorY)
        duration = 1000L          
        start()
    }
}

问题是我动画的ImageView的大小会改变它最终的位置。所以当我使用一个小的时,它最终会在目标视图的右下角,但是当ImageView更大时,它会在屏幕外的某个地方结束。我希望大小无关紧要,视图缩小得更快,最终无论如何都会在同一位置结束。 targetXtargetY对于每个图片大小都是相同的,所以我认为这不是问题。

有人能指出我正确的方向吗?

0 个答案:

没有答案