45

これら 2 つのフラグの違いを理解するのに苦労しており、Windowそれぞれをいつ、なぜ使用する必要があるのか​​ 100% 確信が持てません。

言うためのドキュメントWindow.FEATURE_ACTIVITY_TRANSITIONS

makeSceneTransitionAnimation(Activity, Pair[]) またはで作成された ActivityOptions バンドルを送信または受信することで、Activity が Activity Transitions を実行できるようにします makeSceneTransitionAnimation(Activity, View, String)

そしてWindow.FEATURE_CONTENT_TRANSITIONS言うためのドキュメント:

を使用してウィンドウ コンテンツの変更をアニメーション化するよう要求するためのフラグですTransitionManager

を使用TransitionManagerして設定し setTransitionManager(TransitionManager)ます。何も設定されていない場合は、デフォルトTransitionManagerが使用されます。

ドキュメントには、次のWindowメソッドではフラグを有効にする必要があると記載されていますが、同様に有効にする必要があるFEATURE_ACTIVITY_TRANSITIONSかどうかについては何も述べられていません(ソース コードによると、はデフォルトでマテリアルをテーマにしたアプリケーション用であることに注意してください) 。FEATURE_CONTENT_TRANSITIONSFEATURE_ACTIVITY_TRANSITIONStrueFEATURE_CONTENT_TRANSITIONSfalse

  • get{Enter,Exit,Return,Reenter}Transition()
  • set{Enter,Exit,Return,Reenter}Transition()
  • getSharedElement{Enter,Exit,Return,Reenter}Transition()
  • setSharedElement{Enter,Exit,Return,Reenter}Transition()
  • getTransitionBackgroundFadeDuration()
  • setTransitionBackgroundFadeDuration()

つまり、この情報に基づいてFEATURE_ACTIVITY_TRANSITIONS、アプリケーションが Lollipop の新しい Activity Transition API を使用するために有効にする必要がある機能フラグが得られるようです。しかし、私を混乱させているのは、Android Developers サイトのこの記事FEATURE_CONTENT_TRANSITIONSに、カスタム アクティビティ遷移を実装するには を有効にする必要があると記載されていることです。

だからここに私の質問があります:

  1. これらの 2 つのフラグの違いは何ですか? このコンテキストでの「アクティビティ遷移」と「コンテンツ遷移」の違いは何ですか?
  2. デフォルトでFEATURE_ACTIVITY_TRANSITIONS有効および無効になっているのはなぜですか? 実際にフラグFEATURE_CONTENT_TRANSITIONSを有効にする必要があるのはいつですか?FEATURE_CONTENT_TRANSITIONS
  3. FEATURE_ACTIVITY_TRANSITIONSdisableと enableを意味するのは理にかなっていFEATURE_CONTENT_TRANSITIONSますか? それとも、有効にFEATURE_CONTENT_TRANSITIONSする必要がありますか?FEATURE_ACTIVITY_TRANSITIONS

ありがとう!

4

1 に答える 1

47

ドキュメントが明確ではないため、これらの質問に答える機会があることをうれしく思います。

早い段階で、FEATURE_CONTENT_TRANSITIONS両方の機能を処理する 1 つのフラグがありました。マテリアル アプリケーションが有効になっているときに予期しない動作が発生したときに、それらを分割しました。そのため、一部の古いドキュメントではFEATURE_CONTENT_TRANSITIONS、アクティビティ遷移の取得を有効にする必要があると記載されている場合がありますFEATURE_ACTIVITY_TRANSITIONS

  1. これらの 2 つのフラグの違いは何ですか? このコンテキストでの「アクティビティ遷移」と「コンテンツ遷移」の違いは何ですか?

このコンテキストでのアクティビティの遷移とはstartActivity、作成されたバンドルで呼び出すActivityOptions.makeSceneTransitionAnimationか、そのバンドルでアクティビティが開始されたことを意味します。アクティビティ トランジションはレイアウトを変更します (要素のフェードイン、共有要素の移動など)。アクティビティが気に入らない場合は、 を無効にする必要がありますFEATURE_ACTIVITY_TRANSITIONS

コンテンツ トランジションは、TransitionManager呼び出し時にsetContentView(初回以外) を使用します。通常、クロスフェードが発生しますが、ID の共有や の使用など、アクティビティのコンテンツに共通点がある場合は、それらのビュー間で動作が発生しtransitionNameます。XML またはコードを使用して、ウィンドウに関連付けられた をChangeBoundsカスタマイズすることにより、トランジションの詳細を変更できます。TransitionManager

  1. デフォルトでFEATURE_ACTIVITY_TRANSITIONS 有効および無効になっているのはなぜですか? 実際にフラグFEATURE_CONTENT_TRANSITIONSを有効にする必要があるのはいつですか?FEATURE_CONTENT_TRANSITIONS

FEATURE_CONTENT_TRANSITIONSコンテンツが変更されたときに TransitionManager を使用します。デフォルトでは、これはクロスフェードであり、一部のアプリケーションでは非常に問題がありました。一方、FEATURE_ACTIVITY_TRANSITIONSデフォルトでは、ほとんどのアプリケーションに対して何もしません。その方法でアクティビティを開始することを選択する必要があるため、オンにしても安全です.

  1. FEATURE_ACTIVITY_TRANSITIONSdisableと enableを意味するのは理にかなってい FEATURE_CONTENT_TRANSITIONSますか? それとも、有効にFEATURE_CONTENT_TRANSITIONSする必要 がありますか?FEATURE_ACTIVITY_TRANSITIONS

はい、可能性は低いです。あなたのアプリケーションが を好むならFEATURE_CONTENT_TRANSITIONS、それは でうまく動作するはずFEATURE_ACTIVITY_TRANSITIONSです。他のユーザーが共有要素を使用してあなたのアクティビティを呼び出すことを明示的に制限したい場合、または標準の入力トランジション効果が気に入らない場合は、それを無効にして、別のアプリケーションがあなたのアクティビティを呼び出したときの効果を防​​ぐことができます。

于 2015-03-11T14:55:14.973 に答える