1

私のアプリでは、1つのアクティビティのリストビュー名と次のアクティビティのツールバータイトルの間で共有要素の移行を実装しようとしています。私が直面している問題は、共有要素がアニメーション化されていないことです。その代わりに、レイアウト全体の入力と終了の遷移とともにアニメーション化されるべきです。Android - 共有要素リストビューからツールバータイトルへの遷移

gif animation

ここでは保険のテキストがアニメーション全体とは別にアニメーション化する必要があります。次のように

呼び出しアクティビティアニメーションは、次のとおり

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      getWindow().setSharedElementReturnTransition(TransitionInflater.from(this) 
        .inflateTransition(R.transition.trans_move)); 
//   getWindow().setSharedElementExitTransition(new TransitionSet() 
//     .addTransition(new Fade())); 
      Slide slideTransition = new Slide(); 
      slideTransition.setSlideEdge(Gravity.LEFT); 
      slideTransition.setDuration(getResources().getInteger(R.integer.anim_duration_long)); 
      getWindow().setReenterTransition(slideTransition); 
      getWindow().setExitTransition(slideTransition); 
     } 

setShareElementExitTransition遷移に影響を及ぼさないように第二活性

ActivityOptionsCompat activityOptions 
       = ActivityOptionsCompat.makeSceneTransitionAnimation(
       HomeActivity.this, 
       new Pair<>(view.findViewById(R.id.nameTextView), 
         SharedCertificatesActivity.ab_title) 
     ); 
     Intent _intent=new Intent(mContext, SharedCertificatesActivity.class); 
     ActivityCompat.startActivity(HomeActivity.this, 
       _intent, activityOptions.toBundle()); 

に第活動を開始するために使用

意図それをコメントアウト次のシーンの遷移があります

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
//    Re-enter transition is executed when returning to this activity 
      Slide slideTransition = new Slide(); 
      slideTransition.setSlideEdge(Gravity.LEFT); 
      slideTransition.setDuration(getResources().getInteger(R.integer.anim_duration_medium)); 
      Slide slideRightTransition = new Slide(); 
      slideRightTransition.setSlideEdge(Gravity.RIGHT); 
      slideRightTransition.setDuration(getResources().getInteger(R.integer.anim_duration_medium)); 
//   getWindow().setAllowReturnTransitionOverlap(true); 
      getWindow().setReenterTransition(slideRightTransition); 
      getWindow().setExitTransition(slideTransition); 
//   getWindow().setSharedElementEnterTransition(TransitionInflater.from(this) 
//     .inflateTransition(R.transition.trans_move)); 
      ViewCompat.setTransitionName(title, ab_title); 

     } 

また、私は同様の問題hereを見つけましたが、そこに記載されている解決策は私のためには機能しませんでした。 その上記の問題は、第2のアクティビティのレイアウトは以下の通りである場合:

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 


      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?android:attr/actionBarSize" 
       android:background="@color/primary" 
       app:popupTheme="@style/AppTheme.PopupOverlay"> 

       <TextView 
        android:id="@+id/title" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical|start" 
        android:fontFamily="sans-serif-medium" 
        android:text="Binder Name" 
        android:textColor="@color/_kAppearanceUINavigationBarTextColor" 
        android:textSize="20sp" /> 

      </android.support.v7.widget.Toolbar> 

      <include layout="@layout/binder" /> 
     </LinearLayout> 
. 
. 
. 
</android.support.design.widget.CoordinatorLayout> 

すべてのヘルプは非常

+0

このチュートリアルでは、単一トランジション要素についても説明しました。まだ同じ問題に直面しています https://halfthought.wordpress.com/2014/12/08/what-are-these-dang-transitions/ –

+0

達成しようとしていることと現在達成できないことを正確に説明してください(ビデオ/ gifの方が望ましい)。 –

+0

回答を編集しました。 @XaverKapellerの要件に関するアニメーションとその下のコメントを追加しました –

答えて

0

問題アニメーションタイミングの問題により、主だった問題 が解決理解されるであろう。共有要素は、他のウィンドウアニメーションと比較してはるかに速く(デフォルト値)アニメートしていました。

private void setupWindowAnimations() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Slide slideTransition = new Slide(); 
      slideTransition.setSlideEdge(Gravity.LEFT); 
      slideTransition.setInterpolator(new DecelerateInterpolator()); 
      slideTransition.setDuration(460); 
      Slide slideRightTransition = new Slide(); 
      slideRightTransition.setSlideEdge(Gravity.RIGHT); 
      slideRightTransition.setDuration(getResources().getInteger(R.integer.anim_duration_long)); 
      getWindow().setReenterTransition(slideRightTransition); 
      getWindow().setExitTransition(slideTransition); 
      getWindow().setEnterTransition(slideTransition); 
      getWindow().setSharedElementEnterTransition(new ChangeBounds().setDuration(450)); 
      getWindow().setSharedElementReturnTransition(null); 
      ViewCompat.setTransitionName(title, ab_title); 
      ViewCompat.setTransitionName(menu1, fab_anim); 

     } 
    } 

を次のように第二活性setupWindowAnimations方法を変更し今期待される結果の通り、より滑らかで共有要素転移です。共有要素の遷移についての詳細は、guides.codepath.comGeorge Mount blogにあります。

注:共有要素textviewを、解決されない日付までの呼び出しアクティビティに戻すためのgoogle bugがあります。呼び出し元のアクティビティからの共有要素のリターン遷移を無効にする必要がありました。

関連する問題