0

この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(グライドやピカソの両方がこの問題を持っている)

答えて

3

どうやら問題はherehere前に記載されているに関連していると言うことができます。この問題は実際には画像ローダーから発生します。

トリックは、画像が正常にロードされたときにのみ、アニメーションを再生する

ActivityCompat.postponeEnterTransition(this) 
ActivityCompat.startPostponedEnterTransition(ActivityCardDetails.this) 

.dontTransform()を使用することでした。

関連する問題