【问题标题】:How to resume and pause ObjectAnimator in Android for API Levels below 19?19 以下 API 级别如何在 Android 中恢复和暂停 ObjectAnimator?
【发布时间】:2014-10-03 14:21:54
【问题描述】:

我知道 API 级别 19 支持 ObjectAnimators 上的 pause() 和 resume()。但在我的 API 级别 14 的项目中,我有一个 ObjectAnimator,它应用于图像视图以旋转它。我想在触摸时暂停 ObjectAnimator 提供的动画,并从图像视图所在的位置恢复它(在触摸之前)。

所以我尝试保存当前播放时间并取消我的 stopAnimation() 函数上的对象动画器。

private void stopAnimation(){
        currentTime = mGlobeAnimator.getCurrentPlayTime();
        mGlobeAnimator.cancel();
    }

在 startAnimation() 函数中,我重新创建动画器,将其目标设置为图像视图,设置保存的播放时间并启动它。

private void startAnimation(Context context, View view, float startAngle) {
        ObjectAnimator globeAnimatorClone = (ObjectAnimator)AnimatorInflater.loadAnimator(context, R.animator.rotate_globe);
        globeAnimatorClone.setTarget(mImageView);
        globeAnimatorClone.setCurrentPlayTime(currentTime);
        globeAnimatorClone.start();
}

这不起作用。有人可以帮忙提供 animator 为 19 岁之前的 API 级别提供的暂停和恢复动画的指针吗?

【问题讨论】:

    标签: android animation objectanimator


    【解决方案1】:

    我想我是通过启动动画制作器然后设置 currentPlayTime() 来让它工作的。文档清楚地告诉(我刚刚偶然发现),如果动画尚未开始,使用此方法设置的 currentPlayTime 将不会向前推进!

    将动画的位置设置为指定的时间点。该时间应介于 0 和动画的总持续时间之间,包括任何重复。如果动画还没有开始,那么设置到这个时间后就不会向前推进;它只会将时间设置为此值并根据该时间执行任何适当的操作。如果动画已经在运行,那么 setCurrentPlayTime() 会将当前播放时间设置为此值并从该点继续播放。 http://developer.android.com/reference/android/animation/ValueAnimator.html#setCurrentPlayTime(long)

    private void stopAnimation(){
        mCurrentPlayTime = mRotateAntiClockwiseAnimator.getCurrentPlayTime();
        mRotateAntiClockwiseAnimator.cancel();
    }
    
    private void startAnimation() {
            mRotateAntiClockwiseAnimator.start();
            mRotateAntiClockwiseAnimator.setCurrentPlayTime(mCurrentPlayTime);
    }
    

    【讨论】:

    • ts 与 ObjectAnimator 一起工作,但我们如何暂停/恢复 ObjectAnimatorSet ?
    【解决方案2】:

    您所做的是它只会重新启动您的动画,而不是您可以使用暂停和恢复方法为动画创建自定义类。

    您需要首先检查设备是否为 19 api 及以上,如果是则使用对象动画器的本机暂停和恢复,否则使用从 api 1 设计的常规动画,您可以按照此 thread 进行暂停和继续低于 api 19。

    【讨论】:

    • 自定义暂停动画适用于视图动画。它工作正常。但我也有一个框架布局,其中放置了某些图像按钮。我需要旋转这个框架布局,以便图像按钮与框架布局一起移动。如果我使用自定义视图动画,则图像按钮的点击位于其原始位置(这就是选择 ObjectAnimators 的原因)。在这种情况下如何暂停和恢复 ObjectAnimators?
    【解决方案3】:

    我回答可能为时已晚,我刚刚遇到这个问题,我用你的方法解决了它。 我刚刚在你的方法中添加了两件事 1. 在动画开始时检查** mCurrentPlayTime** 是否大于零。如果它>0 则设置CurrentPlayTime。否则它没用。 2. 当你的动画结束时再次归零。

    【讨论】:

      猜你喜欢
      • 2017-01-12
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多