如果API级别低于19,如何在Android中恢复和暂停ObjectAnimator?

如果API级别低于19,如何在Android中恢复和暂停ObjectAnimator?,android,animation,objectanimator,Android,Animation,Objectanimator,我知道API级别19支持ObjectAnimators上的pause()和resume()。但在我的API级别14的项目中,我有一个ObjectAnimator,它应用于图像视图以旋转它。我想在触摸时暂停ObjectAnimator提供的动画,并从图像视图所在的位置(触摸前)恢复动画 因此,我尝试保存当前播放时间,并在stopAnimation()函数中取消对象动画 private void stopAnimation(){ currentTime = mGlobeAnimato

我知道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 for API level 19之前提供的暂停和恢复动画的指针?

您正在做的是,它只会重新启动动画,而您可以使用pause and resume方法为动画创建自定义类


您需要首先检查设备是否为19 api及以上版本,如果为19 api及以上版本,则使用对象动画师的本机暂停和恢复,否则使用根据api 1设计的常规动画,您可以按照此操作在api 19以下暂停和恢复

我想我是通过启动动画师然后设置currentPlayTime()来实现的。文档清楚地告诉我(我刚刚偶然发现)如果动画还没有开始,那么使用此方法设置的当前播放时间将不会向前推进

将动画的位置设置为指定的时间点。此时间应介于0和动画的总持续时间(包括任何重复)之间。如果动画尚未启动,则设置为该时间后,动画将不会向前推进;它将简单地将时间设置为该值,并根据该时间执行任何适当的操作。如果动画已在运行,则setCurrentPlayTime()会将当前播放时间设置为该值,并从该点继续播放


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

自定义可暂停动画应用于视图动画。而且效果很好。但我也有一个框架布局,其中放置了一些图像按钮。我需要旋转此框架布局,以便图像按钮随框架布局移动。如果使用自定义视图动画,则图像按钮的单击位于其原始位置(这就是选择ObjectAnimators的原因)。在这种情况下,如何暂停和恢复ObjectAnimator?ts与ObjectAnimator一起工作,但我们如何暂停/恢复ObjectAnimatorSet?
private void stopAnimation(){
    mCurrentPlayTime = mRotateAntiClockwiseAnimator.getCurrentPlayTime();
    mRotateAntiClockwiseAnimator.cancel();
}

private void startAnimation() {
        mRotateAntiClockwiseAnimator.start();
        mRotateAntiClockwiseAnimator.setCurrentPlayTime(mCurrentPlayTime);
}