【问题标题】:Calling animation in custom view's Kotlin class from Java activity class从 Java 活动类调用自定义视图的 Kotlin 类中的动画
【发布时间】:2020-04-06 20:23:29
【问题描述】:

我有一个 Java Activity 类,其中包含一个用 Kotlin 编写的自定义视图

@BindView(R.id.icon)
Icon icon;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    icon.showIcon();
}

还有自定义视图类:

fun showIcon() {
    visibility = View.VISIBLE
    rotate()
}

fun rotate() {
    ValueAnimator.ofFloat(0f, 360f).apply {
        interpolator = AccelerateDecelerateInterpolator()
        startDelay = 1000
        duration = 1400
        addUpdateListener {
            val value = it.animatedValue as Float
            squatIV.rotation = value
            Timber.d(iconIV.rotation.toString())
        }
        start()
    }

绑定工作正常,创建时可以看到activity上的图标。甚至动画也会运行,因为它正在记录组件的 Image View 的旋转值。但是在屏幕上,动画没有播放。

这有什么具体原因吗?你遇到过这个问题吗?

更新:您可以在下面看到虚拟活动页面,并且自定义视图需要动画旋转。经过一些后端检查后,自定义视图变为可见并旋转动画触发器。

【问题讨论】:

  • 如果我看到您的自定义视图会更容易解决问题。我觉得问题不难
  • 嗨@sergkk,我已经添加了页面的虚拟表示
  • 这可能是百万原因出现的问题。所以很难说正确的答案。请提供我的代码(它可以是隐私)。可能你不使用

标签: java android kotlin android-animation android-custom-view


【解决方案1】:

试试这个解决方案:

fun rotate() {
    ValueAnimator.ofFloat(0f, 360f).apply {
        interpolator = AccelerateDecelerateInterpolator()
        startDelay = 1000
        duration = 1400
        addUpdateListener {
            val value = it.animatedValue as Float
            squatIV.rotation = value
            Timber.d(iconIV.rotation.toString())

            invalidate() // must be!
            requestLayout() // check if works without it
        }
        start()
    }

【讨论】:

  • 已添加 invalidate()requestLayout() 仍然没有显示动画在屏幕上播放,但触发了 updatelistener :(
  • 如果我看到你的自定义视图会更容易解决问题。
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 2012-02-28
  • 2017-08-10
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多