我的应用程序以一个显示简短帧动画的开始(欢迎)活动开始。我正在使用this class这样做。 我第一次运行应用程序一切正常。但如果我完成它,下一次动画根本不会显示。我能再次看到它的唯一方法是首先强制终止(来自Android应用程序管理器)。
这就是我开始动画的方式:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_opening);
ImageView img = (ImageView)findViewById(R.id.openingAnimImg);
frameAnimation = FasterAnimationsContainer.getInstance(img);
prepareFrames();
frameAnimation.setOnAnimationStoppedListener(this);
frameAnimation.start();
}
动画结束后,我开始另一项活动
要关闭应用程序,我只是使用后退键,直到堆栈上没有其他活动。值得一提的是,这个开场活动有noHistory="true"
,因此一旦第二个活动开始就无法达到。
我跟踪了这个问题,我在这个函数上发现了一个奇怪的行为:
private class FramesSequenceAnimation implements Runnable{
@Override
public void run() {
ImageView imageView = mSoftReferenceImageView.get();
if (!mShouldRun || imageView == null) {
mIsRunning = false;
if (mOnAnimationStoppedListener != null) {
mOnAnimationStoppedListener.onAnimationStopped();
}
return;
}
mIsRunning = true;
/* isShown() is returning false here! */
if (imageView.isShown()) {
AnimationFrame frame = getNext();
GetImageDrawableTask task = new GetImageDrawableTask(imageView);
try {
task.execute(frame.getResourceId());
}catch(RejectedExecutionException ree){
Log.e("ANIMATION", "Rejected execution");
}
mHandler.postDelayed(this, frame.getDuration());
}
}
}
因此,ImageView没有显示动画,因为该注释行返回false。为什么会这样?为什么该计划第一次运作?第一次和第二次执行之间有什么变化?
如果您需要更多信息或我不清楚,请告诉我。