为什么我的动画只显示第一次执行?

时间:2015-04-25 03:56:08

标签: android animation frame show

我的应用程序以一个显示简短帧动画的开始(欢迎)活动开始。我正在使用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。为什么会这样?为什么该计划第一次运作?第一次和第二次执行之间有什么变化?

如果您需要更多信息或我不清楚,请告诉我。

0 个答案:

没有答案