gpt4 book ai didi

重复时Android动画 "blink"

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:03 26 4
gpt4 key购买 nike

在我的应用程序中我有这个动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:shareInterpolator="true">

<alpha
android:duration="1000"
android:startOffset="2000"
android:fromAlpha="0"
android:toAlpha="1"/>

<scale
android:duration="400"
android:startOffset="4000"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.9"
android:toYScale="0.9"/>

<scale
android:duration="400"
android:startOffset="4400"
android:fromXScale="0.9"
android:fromYScale="0.9"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1"
android:toYScale="1"/>

<alpha
android:duration="1000"
android:startOffset="5800"
android:fromAlpha="1"
android:toAlpha="0"/>

</set>

通常它显示图像,做出“按下”手势并隐藏它。我想要的是在无限循环中运行这个动画。设置参数 repeatCount 不起作用。我找到的唯一方法是在动画监听器中再次启动动画。

final Animation pointerAnim = AnimationUtils.loadAnimation(this, R.anim.pointer);

pointerAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(final Animation animation) {}

@Override
public void onAnimationEnd(final Animation animation) {
pointerView.startAnimation(pointerAnim);
}

@Override
public void onAnimationRepeat(final Animation animation) {}
});

pointerView.startAnimation(pointerAnim);

但是我的问题来了。在结束动画和新开始动画之间,图像“闪烁”(在短时间内出现并消失),我不知道如何防止这种情况发生。使用 fillAfter 不起作用。在监听器中设置适当的可见性也不起作用。请注意,目标 API 是 10。

我很乐意提供任何建议

最佳答案

这出人意料地棘手,但这里有一个似乎有效并避免眨眼的答案。将动画分成两部分并设置两个动画监听器,以便在每个完成时触发另一个开始。它看起来如下:

pointer_fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:shareInterpolator="true">

<alpha
android:duration="1000"
android:startOffset="2000"
android:fromAlpha="0"
android:toAlpha="1"/>

<scale
android:duration="400"
android:startOffset="4000"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.9"
android:toYScale="0.9"/>
</set>

pointer_fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="400"
android:startOffset="0"
android:fromXScale="0.9"
android:fromYScale="0.9"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1"
android:toYScale="1"/>

<alpha
android:duration="1000"
android:startOffset="1400"
android:fromAlpha="1"
android:toAlpha="0"/>
</set>

然后是代码:

    final Animation pointerFadeInAnim = AnimationUtils.loadAnimation(this, R.anim.pointer_fade_in);
final Animation pointerFadeOutAnim = AnimationUtils.loadAnimation(this, R.anim.pointer_fade_out);

pointerFadeInAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(final Animation animation) {}

@Override
public void onAnimationEnd(final Animation animation) {
pointerView.startAnimation(pointerFadeOutAnim);
}

@Override
public void onAnimationRepeat(final Animation animation) {}


});
pointerFadeOutAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}

@Override
public void onAnimationEnd(Animation animation) {
pointerView.startAnimation(pointerFadeInAnim);
}

@Override
public void onAnimationRepeat(Animation animation) {}
});

pointerView.startAnimation(pointerFadeInAnim);

希望这对你有用!

关于重复时Android动画 "blink",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31987029/

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