Ich habe eine Aktivität mit einem Bild in einer Symbolleiste und eine Aktivität, die wie ein Dialog mit dem gleichen Bild im großen themed ist. Dies sind die Layout-Dateien:Android Shared Element zu Dialog Activity
my_activity.xml:
...
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/my_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:scaleType="centerCrop"
android:src="@drawable/my_drawable"
android:transitionName="@string/my_image_transition"
app:riv_oval="true" />
...
my_dialog_activity.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@id/my_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/my_drawable"
android:tint="@color/accent"
android:transitionName="@string/my_image_transition" />
</LinearLayout>
Der Dialog Aktivität ein Dialog wird durch dieses Thema im Manifest Anwendung:
<style name="MyDialogActivity" parent="Theme.AppCompat.Light.Dialog.MinWidth">
<item name="windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
</style>
Sowohl die Aktivität als auch der Dialog sehen genau so aus, wie sie aussehen sollen.
Jetzt möchte ich eine gemeinsame Elementanimation mit diesen ImageViews implementieren: Wenn der Benutzer auf das Bild der ersten Aktivität klickt, muss es wachsen und sich in die Mitte des Bildschirms bewegen, damit es dem größeren Dialogbild entspricht.
Also schrieb ich diesen Code:
Intent intent = new Intent(MyActivity.this, MyDialogActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
MyActivity.this, v, getString(R.string.my_image_transition)
);
startActivityForResult(intent, 999, options.toBundle());
} else {
startActivityForResult(intent, 999);
}
Die Animation tatsächlich passiert, aber das bewegte Bild ist nur sichtbar innerhalb des Bereichs des Dialogs. Sie sehen also ein Bild, das aus der oberen linken Ecke des Dialogfelds kommt, aber Sie sehen es nicht von der ersten Aktivität außerhalb des Dialogs.
Hier ist eine HTML-Version, wie es aussehen soll und was es derzeit wie folgt aussieht: https://jsfiddle.net/wutqdh9d/1/
Warum brauchen Sie aus diesem Grund Dialogaktivität? animiere einfach dein Bild in der Hauptaktivität in die Mitte und platziere ein Layout mit weißem Hintergrund und lasse es erscheinen, wenn das Animieren endet. – uguboz
Die Dialogaktivität enthält auch andere Ansichten wie eine Werkzeugleiste. –