当前位置:  开发笔记 > 编程语言 > 正文

React Native动画 - 在缩放时translateX和translateY

如何解决《ReactNative动画-在缩放时translateX和translateY》经验,为你挑选了1个好方法。

Animated.View有以下风格:

    {
        transform: [
            {
                scale: this.animatedValue.interpolate({
                    inputRange: [0, 1],
                    outputRange: [initialScale, 1]
            })},
            {
                translateX: this.animatedValue.interpolate({
                    inputRange: [0, 1],
                    outputRange: [startX, endX]
            })},
            {
                translateY: this.animatedValue.interpolate({
                    inputRange: [0, 1],
                    outputRange: [startY, endY]
            })},
        ]
    }

当initialScale为1并且动画开始时,我看到预期的行为:Animated.View从(startX,startY)开始并线性移动到(endX,endY).
但是,例如,当initialScale为0.5时,视图的起点不是(startX,startY),移动不是线性的(有点球形),终点仍然是预期的 - (endX,endY).

如何在保持线性运动和预期起始位置的同时缩放我的视图?



1> jevakallio..:

就像评论中指出的@ArneHugo用户一样,非线性运动可以通过定位全尺寸容器元素并在其中缩放另一个元素来解决.

元素的位置不符合预期,因为缩放变换的原点是元素的中心点.React Native不支持指定变换原点,但如果预先知道了缩放元素的宽度和高度,则可以很容易地计算偏移量,如下所示:

const width = 100;
const height = 20;
const scale = {
  transform: [
    {
      scale: this.animatedValue.interpolate({
        inputRange: [0, 1],
        outputRange: [initialScale, 1]
      })
    }
  ]
};

const position= {
  transform: [
    {
      translateX: this.animatedValue.interpolate({
        inputRange: [0, 1],
        outputRange: [startX - (width / 2) - (width * initialScale / 2), endX]
      })
    },
    {
      translateY: this.animatedValue.interpolate({
        inputRange: [0, 1],
        outputRange: [startY - (height / 2) - (height * initialScale / 2), endY]
      })
    }
  ]
};

return (
  
    
  
);

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有