このvideoでわかるように、新しいアクティビティの公開をアニメーション化しようとしています。イメージはアクティビティを開くときに適切にアニメーション表示されますが、戻ってきても悲惨に失敗します(私はsupportFinishAfterTransition()
を使用しています)Android共有要素の移行のバグ
私はここやGoogleで見つけたすべての種類の方法を試しました。 :
のres /トランジションの下のトランジションの定義:その後、
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds/>
<changeImageTransform/>
</transitionSet>
と主な活動のスタイルと私は開いてる1の両方でそれを使用します。
<!-- enable window content transitions -->
<item name="android:windowActivityTransitions">true</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
を
private void openNewActivity() {
String transitionName = "details";
Intent intent = new Intent(mContext, ActivityCardDetails.class);
ViewCompat.setTransitionName(mImageView, transitionName);
//noinspection unchecked
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation((MainActivity)mContext,
mImageView, // The view which starts the transition
transitionName // The transitionName of the view we’re transitioning to
);
ActivityCompat.startActivity((MainActivity) mContext, intent, options.toBundle());
}
これが開始ImageViewのである:私の見解ホルダーから
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setSharedElementExitTransition(...);
getWindow().setSharedElementEnterTransition(...);
私はそうすることによって、新たな活動を始めている:
は、私も自分のJavaコードで同じことを試してみましたアニメーション:
<ImageView
android:layout_width="match_parent"
android:layout_height="180dp"
android:id="@+id/business_card_image"
android:adjustViewBounds="true"
android:scaleType="centerCrop" />
と、これはそれをバックアニメーション化すべき二ImageViewのです:
<ImageView
android:id="@+id/business_card_image"
android:layout_width="match_parent"
android:layout_height="180dp"
android:scaleType="centerCrop"
android:fitsSystemWindows="@bool/isFitSystemWindows"
android:transitionName="@string/transition_card_details"
app:layout_collapseMode="parallax" />
PS:これはユーザー作成のコンテンツで、画像の読み込みにGlideを使用しています。画像の縦横比を制御できません。
Glide.with(mContext)
.load(toLoad)
.fitCenter()
.centerCrop()
.crossFade()
.into(mImageView);
私は今、数週間のために、この問題で苦労してきたと私はちょうどそれを克服するために見えることはできません。
境界をアニメーション化できないのはなぜですか?
ありがとうございました!
更新:明らかにバグは画像の幅に関係しています。幅を定数(例えば200dp)に設定している場合、アニメーションは両方向で正常に動作しますが、イメージの幅をmatch_parent
に設定すると、リターンアニメーションが壊れます。
アップデート2:私はかなりこのバグは、画像の読み込みLIB(グライドやピカソの両方がこの問題を持っている)