我正在尝试实现一个动画,我在其中创建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
更大时,它会在屏幕外的某个地方结束。我希望大小无关紧要,视图缩小得更快,最终无论如何都会在同一位置结束。 targetX
和targetY
对于每个图片大小都是相同的,所以我认为这不是问题。
有人能指出我正确的方向吗?