gpt4 book ai didi

android - onAnimationEnd 没有被调用,onAnimationStart 工作正常

转载 作者:IT王子 更新时间:2023-10-28 23:52:20 32 4
gpt4 key购买 nike

我在 PopupWindow 中有一个 ScrollView。我正在使用 TranslateAnimation 为 ScrollView 内容制作动画。

动画开始时,会调用 onAnimationStart 监听器,但不会调用 onAnimationEnd。有什么想法吗?

布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/popup_window_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:layout_width="@dimen/toolbar_padding_left"
android:layout_height="@dimen/toolbar_height"/>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+web/toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:visibility="invisible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

...

</LinearLayout>
</ScrollView>
</LinearLayout>

动画代码:

mToolbar = mPopupContents.findViewById( R.web.toolbar );
TranslateAnimation anim =
new TranslateAnimation(0, 0, -60, 0);
anim.setDuration(1000);
anim.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation a) {
Log.d(LOGTAG, "---- animation start listener called" );
}
public void onAnimationRepeat(Animation a) {}
public void onAnimationEnd(Animation a) {
Log.d(LOGTAG, "---- animation end listener called" );
}
});
mToolbar.startAnimation(anim);

更新:我验证了 onAnimationEnd 已被调用,但它在延迟一段时间后被调用(前提是您在此期间没有启动新动画)。

最佳答案

AnimationEnd 不可靠。如果您不想使用覆盖 OnAnimationEnd 的自定义 View 重写代码,请使用 postDelayed

下面是一些示例代码:

final FadeUpAnimation anim = new FadeUpAnimation(v);
anim.setInterpolator(new AccelerateInterpolator());
anim.setDuration(1000);
anim.setFillAfter(true);
new Handler().postDelayed(new Runnable() {
public void run() {
v.clearAnimation();
//Extra work goes here
}
}, anim.getDuration());
v.startAnimation(anim);

虽然它可能看起来很难看,但我可以保证它非常可靠。我将它用于插入新行的 ListViews,同时将动画删除到其他行。使用 AnimationEnd 对监听器进行压力测试被证明是不可靠的。有时 AnimationEnd 从未被触发。您可能希望在 postDelayed 函数中重新应用任何转换,以防动画未完全完成,但这实际上取决于您使用的动画类型。

关于android - onAnimationEnd 没有被调用,onAnimationStart 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474923/

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