gpt4 book ai didi

java - 无限旋转的 ObjectAnimator 卡顿

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:15 33 4
gpt4 key购买 nike

我有一个动画师,infinite_rotation,定义为:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="rotation"
android:repeatCount="infinite"
android:valueFrom="0"
android:valueTo="360"
android:duration="2000" />
</set>

当我不再需要它的时间(时间不确定)到来时,我调用 infinite_animator.cancel()。然后在其布局容器上播放一个fade_out动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="alpha"
android:repeatCount="0"
android:valueTo="0.0"
android:duration="1000" />
</set>

生成的动画是,旋转按预期停止,但在淡出时停顿。我错过了什么?

这是它的样子:

enter image description here

更新:我在带有 Kitkat OS 的旧三星 Tab 4 上测试了上述问题。我刚刚在带有 Marshmallow OS 的相当新的 Samsung Tab 4 上进行了测试。动画效果很好。所以我想更好的问题是如何修复旧设备/操作系统上的草率动画?

这是动画调用:

private void animateRefreshButton() {
ImageView iv_refresh = (ImageView) findViewById(R.id.iv_refresh);

if(infinite_animator == null) {
infinite_animator = AnimatorInflater.loadAnimator(this, R.animator.refresh_rotate);
}
infinite_animator.setTarget(iv_refresh);
infinite_animator.start();
}

hideRefreshButton() 在应用确定刷新完成时启动。这是取消和淡出动画的调用:

private void hideRefreshButton() {
if(infinite_animator != null) {
infinite_animator.cancel();
}

Animator anim = AnimatorInflater.loadAnimator(this, R.animator.refresh_fadeout);
anim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}

@Override
public void onAnimationEnd(Animator animation) {
framelayout_container_of_iv_refresh.setVisibility(View.GONE);
}

@Override
public void onAnimationCancel(Animator animation) {}

@Override
public void onAnimationRepeat(Animator animation) {}
});
anim.setTarget(framelayout_container_of_iv_refresh);
anim.start();
}

最佳答案

我个人不使用 Animation API因为 "problems" it has .相反,我会选择 Animators API在这种情况下。

有这个 fragment :


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

View view = findViewById(R.id.imageView);

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, View.ROTATION, 0.0f, 360.0f);

objectAnimator.setDuration(2000);
objectAnimator.setRepeatCount(Animation.INFINITE);
objectAnimator.setInterpolator(new LinearInterpolator());

objectAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationCancel(Animator animation) {
view.animate()
.alpha(0.0f)
.setDuration(1000);
}
});

objectAnimator.start();

view.setOnClickListener((v) -> objectAnimator.cancel());

}

然后这将是输出:

enter image description here


我已经在模拟器 (API 19) 上测试过:按预期工作。

关于java - 无限旋转的 ObjectAnimator 卡顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216928/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com