java - onAnimationEndListener 的可靠性如何?
问题描述
当用户播放下一首歌曲时,我制作了一个带有动画的媒体播放器应用程序,专辑封面淡出,下一首歌曲的专辑封面淡入。
我首先开始淡出动画,如果这个动画结束,我发送一个广播开始第二首歌。
我想知道它onAnimationEnd
是否可靠并且总是会被调用,因为如果不是,那么我的应用程序基本上就不能再播放下一首/上一首歌曲了。
private void nextSong(){
mAlbumArtLarge.startAnimation(fadeOutAnimation);
mAlbumIvBottom.startAnimation(fadeOutAnimation);
mAlbumArt.startAnimation(fadeOutAnimation);
tvSongTitle.startAnimation(fadeOutAnimation);
tvArtistName.startAnimation(fadeOutAnimation);
tvSongListSize.startAnimation(fadeOutAnimation);
fadeOutAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (Main.getInstance().mServiceIsBound) {
Main.getInstance().mediaPlayerService.startActionNextSong(getApplication(), songList, songIndex);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
解决方案
根据我的经验,如果您在onCreate()
活动开始期间运行动画view.post{ startAnimation() }
并且在动画开始期间进入后台,则不会调用它,它不会调用侦听器。最终对我来说问题是使用post(Runnable)
队列在主线程上执行,因为它在onCreate()
. 我已经通过使用onWindowFocusChanged()
+解决了它post{}
。在生产中使用它一段时间后会更新我的答案。目前在不同的设备/API 上对其进行了测试,没有出现问题。
想一想:您可以添加一些(安全解决方法)带有计时器的处理程序(例如,如果动画没有结束,则为 5 秒,您在 5 秒后执行下一步)
推荐阅读
- javascript - 我正在尝试创建一个 JavaScript 程序,提示用户“输入是或否退出”
- reactjs - 结合 React 路由器和 Firebase 函数 api
- excel - 在其他表中查找匹配值并将相邻值复制回第一个表
- dart - 如何使用 `class` 作为 Map 的键?
- c# - forceRefresh 参数在只调用 await Task.FromResult(items) 的方法中有什么作用?
- java - 如何修复 GridPane 上的标签在索引(0,0)上堆叠?它似乎忽略了我对函数的输入
- python - 如何消除此错误?fit() 缺少 1 个必需的位置参数:'y'
- android - 活动类意图进入特定片段(导航抽屉中的片段)
- azure-active-directory - Azure Active Directory B2B - 帮助困惑的用户登录
- c++ - 如何使用 Visual Studio 2019 设置 sqlite