【问题标题】:Animation not working while loading from XML in Android在 Android 中从 XML 加载时动画不起作用
【发布时间】:2020-07-26 08:54:45
【问题描述】:

我正在尝试在 ViewPager2 中使用 Fragments 制作一些动画。

但问题是当我从 XML 加载动画时,它是第一次工作。在 ViewPager 中向左/向右滑动并返回到动画不起作用的同一页面后。

下面是 XML 动画

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:interpolator="@android:anim/linear_interpolator"
    android:duration="4000" />

下面是我用来在 Fragment 中加载动画的代码

Animation rotate = AnimationUtils.loadAnimation(getContext(), R.anim.rotate);
view.startAnimation(rotate);

我也做了一些没有从 XML 加载的动画,它工作得非常好。只有当我从 XML 加载动画时才会出现这个问题。

【问题讨论】:

  • 滑动后你的 startAnimation() 代码会被调用吗?
  • 没有@Prashant.J,我在 onCreateView() 中调用 startAnimation()
  • 您是否通过在 onPageSelected() 中添加动画代码进行检查?
  • @Prashant.J,如何在 onPageSelected() 中访问 Fragment 的视图?

标签: android android-layout android-fragments android-viewpager android-viewpager2


【解决方案1】:

尝试在您的动画对象上使用重复。

rotate.setRepeatCount(Animation.INFINITE);

(Animation.RESTRT)

或 动画上的 setInterpolator()

在 onPageSelected() 中编写动画代码

View pager OnPageChangeListener

【讨论】:

  • 我在 XML 中设置了 android:repeatCount="infinite"
【解决方案2】:

您在 onCreateView() 中调用 startAnimation(),此时视图刚刚被创建,但在屏幕上不可见,这就是动画没有开始在 onStart() 中调用 startAnimation() 的原因;

@Override
public void onStart() {
    super.onStart();
    Animation rotate = AnimationUtils.loadAnimation(getContext(), R.anim.rotate);
    view.startAnimation(rotate);
}

【讨论】:

  • 我正在为 ViewPager 适配器使用 FragmentStateAdapter,当我在向左/向右滑动后需要关注该片段时,它不会调用 onStart()。所以,在onResume() 中添加startAnimation() 解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多