gpt4 book ai didi

java - 单击任意位置后,将 fillAfter 设置为 true 的 Android 动画会重置

转载 作者:行者123 更新时间:2023-11-30 10:44:23 35 4
gpt4 key购买 nike

在我的 Android 项目中,我有一个 Button单击后应该“动画化”(并保持隐藏状态)。效果作为定义在 anim 中的 AnimationSet 实现。我正在使用 AnimationUtils 加载的资源.要在最后一帧卡住动画,我使用 setFillAfter(true) .

private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
if (v != button) return;
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Animation animation = AnimationUtils.loadAnimation(button.getContext(), R.anim.out_to_back);
animation.setFillAfter(true);
button.startAnimation(animation);
}
});
}

动画资源本身定义如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:fillAfter="true"
android:duration="400">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0" />
<scale
android:fromXScale="1"
android:toXScale="0"
android:fromYScale="1"
android:toYScale="0"
android:pivotX="50%"
android:pivotY="50%" />
</set>

单击后,按钮会按预期进行动画处理。但是,问题是当我点击其他地方时动画会重置。一个简单的演示:

Button fade-out animation being reset after clicking anywhere

这是一个错误,还是我遗漏了一些非常明显的东西?感谢您的任何想法!

附加信息

  • 我是否设置fillAfter并不重要在代码、XML 资源或两者中
  • 在 XML 中设置时,我是否将它应用于 <set> 并不重要元素,或两个单独的“组件”<alpha><scale>
  • 预览是在运行 API 16 的模拟器上捕获的
  • 这不会发生在 API 22 上

PS:我知道我最好使用 Animator , 而不是 Animation API(除非我需要针对 pre-Honeycomb,而我不需要)我可能会切换到 Animator无论如何,看看这种行为是否仍然存在。但我很好奇这里到底发生了什么!

最佳答案

您可以立即尝试的一件事是在动画 xml 中设置 android:fillEnabled="true" 属性以及 fillAfter。我不确定这是否有帮助,但我知道这在某些情况下是有效的。

如果这不起作用,您的另一个选择是为您的动画设置一个 AnimationListener,然后在动画完成后将按钮的可见性设置为 GONE。这将使它一旦淡出发生,按钮将从 View 中删除,直到您选择再次将它带回来。它看起来像这样:

Animation animation = AnimationUtils.loadAnimation(button.getContext(), R.anim.out_to_back);
animation.setFillAfter(true);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {

}

@Override
public void onAnimationEnd(Animation animation) {
button.setVisibility(View.GONE);
}

@Override
public void onAnimationRepeat(Animation animation) {

}
});
button.startAnimation(animation);

它可能会提示你的 button 变量不是最终的。您应该能够通过简单地将通过您的 onClick 方法进入的 View 分配给本地最终变量来解决这个问题,例如 final View buttonView = v;

关于java - 单击任意位置后,将 fillAfter 设置为 true 的 Android 动画会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400991/

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