【问题标题】:Infinite rotation of an Image in Jetpack ComposeJetpack Compose 中图像的无限旋转
【发布时间】:2021-07-15 00:05:05
【问题描述】:

如何让我的图片无限旋转?

这是我的代码,但动画不起作用

 val angle: Float by animateFloatAsState(
            targetValue = 360F,
            animationSpec = infiniteRepeatable(
                tween(2000))
        )
        Image(
            painter = painterResource(R.drawable.sonar_scanner),
            "image",
            Modifier
                .fillMaxSize()
                .rotate(angle),
            contentScale = ContentScale.Fit
        )

【问题讨论】:

    标签: android animation android-jetpack-compose


    【解决方案1】:

    您可以通过rememberInfiniteTransition 使用InfiniteTransition
    类似的东西

    val infiniteTransition = rememberInfiniteTransition()
    val angle by infiniteTransition.animateFloat(
        initialValue = 0F,
        targetValue = 360F,
        animationSpec = infiniteRepeatable(
            animation = tween(2000, easing = LinearEasing)
        )
    )
    

    只是一个注释。
    而不是使用

    Modifier.rotate(angle)
    

    你可以使用

         Modifier
            .graphicsLayer {
                rotationZ = angle
            }
    

    您可以查看文档:

    如果您有由androidx.compose.runtime.State 或动画值支持的图层属性,则首选此版本,因为读取block 中的状态只会导致图层属性更新,而不会触发重组和重新布局。

    【讨论】:

      【解决方案2】:

      在我看来,对于此类用例,您应该为无限动画使用预定义的 API。

      val infiniteTransition = rememberInfiniteTransition()
      val angle by infiniteTransition.animateFloat(
          initialValue = 0f,
          targetValue = 360f,
          animationSpec = infiniteRepeatable(
              animation = keyframes {
                  durationMillis = 1000
              }
          )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-22
        相关资源
        最近更新 更多