Mon application avait l'habitude de faire passer un élément partagé d'un fragment à une activité. Je ne sais pas exactement quand cela a cessé de fonctionner. J'ai apporté des modifications mineures au code, mais rien qui n'affecte le code autour des transitions. La plus grande chose que j'ai faite est de mettre à jour mes bibliothèques de support en v24.2.1 (à partir de v23.3.0). Je me demande si je ne suis pas en train de négliger quelque chose de stupide, ou si le changement de bibliothèque de support a fait quelque chose. Les extraits de code pertinents suivent :
Le code qui démarre la transition de l'élément partagé :
public void PreviewClicked(object sender, EventArgs e)
{
var intent = new Intent(Activity, typeof(RoutineActivity));
intent.PutExtra(RoutineBundleKeys.BLOB_ID, _selectedBlobId.ToString());
intent.PutExtra(RoutineBundleKeys.ROUTINE_TITLE, _selectedTitle);
intent.PutExtra(RoutineBundleKeys.ROUTINE_HTML, ViewModel.Html);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
_selectedPreview.TransitionGroup = true;
ActivityOptionsCompat options = ActivityOptionsCompat.MakeSceneTransitionAnimation(Activity,
_selectedPreview,
"webview_preview_transition");
StartActivity(intent, options.ToBundle());
}
else
{
StartActivity(intent);
}
}
Et l'élément XML qui est partagé (_selectedPreview dans l'extrait ci-dessus) :
<WebView
android:id="@+id/routine_preview"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center_vertical"
android:scrollbars="none"
android:transitionName="webview_preview_transition" />
La méthode OnCreate dans l'activité de finition :
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.routine_activity_layout);
_routineTitle = Intent.GetStringExtra(RoutineBundleKeys.ROUTINE_TITLE);
var titleToolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.doc_title_toolbar);
SetSupportActionBar(titleToolbar);
SupportActionBar.Title = _routineTitle;
_htmlString = Intent.GetStringExtra(RoutineBundleKeys.ROUTINE_HTML);
if (_htmlString != null)
{
_routineView = FindViewById<WebView>(Resource.Id.routine_frame);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
_routineView.TransitionGroup = true;
}
_routineView.Settings.BuiltInZoomControls = true;
_routineView.Settings.DisplayZoomControls = false;
string mimeType = "text/html";
string encoding = "UTF-8";
_routineView.LoadDataWithBaseURL("", _htmlString, mimeType, encoding, "");
}
else
{
var blobIdString = Intent.GetStringExtra(RoutineBundleKeys.BLOB_ID);
_blobId = new Guid(blobIdString);
RoutineFragment routineFragment = new RoutineFragment(_blobId);
SupportFragmentManager.BeginTransaction().Replace(Resource.Id.routine_frame, routineFragment).Commit();
}
}
Et le XML pour cette activité :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nothing"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/doc_title_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
<WebView
android:id="@+id/routine_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transitionName="webview_preview_transition" />
</LinearLayout>
Dans mon thème de base, j'ai <item name="android:windowContentTransitions">true</item>
Je ne sais pas quel est le problème. Il semble que tout soit bien configuré.