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