void EnterTransitionCoordinator::PrepareEnter() { AutoPtr<IViewGroup> vg; GetDecor((IViewGroup**)&vg); IView* decorView = IView::Probe(vg); if (mActivity == NULL || decorView == NULL) { return; } mActivity->OverridePendingTransition(0, 0); if (!mIsReturning) { mActivity->ConvertToTranslucent(NULL, NULL, &mWasOpaque); AutoPtr<IDrawable> background; decorView->GetBackground((IDrawable**)&background); if (background != NULL) { AutoPtr<IWindow> window; window->SetBackgroundDrawable(NULL); background->Mutate(); background->SetAlpha(0); window->SetBackgroundDrawable(background); } } else { mActivity = NULL; // all done with it now. } }
void EnterTransitionCoordinator::StartEnterTransition( /* [in] */ ITransition* transition) { AutoPtr<IViewGroup> vg; GetDecor((IViewGroup**)&vg); IView* decorView = IView::Probe(vg); if (!mIsReturning && decorView != NULL) { AutoPtr<IDrawable> background; decorView->GetBackground((IDrawable**)&background); if (background != NULL) { background->Mutate(); AutoPtr<IWindow> window; GetWindow((IWindow**)&window); window->SetBackgroundDrawable(background); AutoPtr<ArrayOf<Int32> > args = ArrayOf<Int32>::Alloc(1); args->Set(0, 255); mBackgroundAnimator = ObjectAnimator::OfInt32( IInterface::Probe(background), String("alpha"), args); IAnimator* va = IAnimator::Probe(mBackgroundAnimator); va->SetDuration(GetFadeDuration()); AutoPtr<IAnimatorListener> listener = new MyAnimatorListenerAdapter(this); va->AddListener(listener); va->Start(); } else if (transition != NULL) { AutoPtr<ITransitionListener> listener = new EnterTransitionListener(this); transition->AddListener(listener); } else { MakeOpaque(); } } }
ECode EnterTransitionCoordinator::Stop() { // Restore the background to its previous state since the // Activity is stopping. if (mBackgroundAnimator != NULL) { IAnimator* va = IAnimator::Probe(mBackgroundAnimator); va->End(); mBackgroundAnimator = NULL; } else if (mWasOpaque) { AutoPtr<IViewGroup> vg; GetDecor((IViewGroup**)&vg); IView* decorView = IView::Probe(vg); if (decorView != NULL) { AutoPtr<IDrawable> drawable; decorView->GetBackground((IDrawable**)&drawable); if (drawable != NULL) { drawable->SetAlpha(1); } } } MakeOpaque(); mIsCanceled = TRUE; mResultReceiver = NULL; mActivity = NULL; MoveSharedElementsFromOverlay(); if (mTransitioningViews != NULL) { ShowViews(mTransitioningViews, TRUE); } ShowViews(mSharedElements, TRUE); ClearState(); return NOERROR; }