Android ScaleAnimation到Rect的中心

我想通过使用ScaleAnimation对象缩放放置在Android中的RelativeLayout中的Rect的中心。

注意:矩形高度与容器视图的高度相等,因此只要找到pivotXValue,pivotYValue对于中心就是0.5F。 数据透视工作正常。

我试图获取Rect的中心,然后将它除以视图的宽度以获取pivotXValue,然后将其用于ScaleAnimation构造函数中。

我可以添加Rect并确切地查看它在哪里调试。 它不会放大到Rect的中心。 根据矩形是位于containerView中心的左边还是右边,“缩放点”似乎分别偏向右侧或左侧。

那是:

ContainerView中间的Rect过去了,到了左边,ScaleAnimation的“缩放点”的偏移量似乎越多越好。

Rectangle越过ContainerView中间的右边,越接近ScaleAnimation的“缩放点”的偏移量。

代码如下:

val zoomScale = 2.0F

val pivotXReference = zoomRect.right - (zoomRect.width() / 2F)

val pivotXValue = pivotXReference / containerView.width.toFloat()

val scaleAnim = ScaleAnimation(
                1f,
                zoomScale,
                1f,
                zoomScale,
                Animation.RELATIVE_TO_SELF,
                pivotXValue,
                Animation.RELATIVE_TO_SELF,
                0.5F)

scaleAnim.duration = 250
scaleAnim.fillAfter = true
containerView.animation = scaleAnim

我放弃了ScaleAnimation,因为我永远不知道它,再加上我没有更新视图本身的属性,只更新了绘图,这不是我所需要的。

我通过使用ObjectAnimator类来解决它。 它像我想要的那样放大并着陆在矩形中心:

        val pivotXReference = zoomRect.right - (zoomRect.width() / 2)

        val anim = ObjectAnimator.ofFloat(fretboardView, "scaleX", zoomScale)
        anim.duration = 250

        val anim2 = ObjectAnimator.ofFloat(fretboardView, "scaleY", zoomScale)
        anim2.duration = 250

        // It was scaled at the center, so minus /2 offsets it to 0, then subtract how "right" you want to offset the x position
        val animX = ((fretboardView.width * zoomScale) / 2) - (pivotXReference.toFloat() * zoomScale)
        val anim3 = ObjectAnimator.ofFloat(fretboardView, "x", animX)
        anim3.duration = 250

        val animSetXY = AnimatorSet()
        animSetXY.playTogether(anim, anim2, anim3)
        animSetXY.start()
链接地址: http://www.djcxy.com/p/42607.html

上一篇: Android ScaleAnimation to Center of Rect

下一篇: Android Animation ObjectAnimator Pivot from center