これら2つのフラグ Window
の違いを理解するのに問題があり、それぞれを使用する必要がある場合とその理由が100%確実ではありません。
_Window.FEATURE_ACTIVITY_TRANSITIONS
_ のドキュメントは次のように言います:
makeSceneTransitionAnimation(Activity, Pair[])
またはmakeSceneTransitionAnimation(Activity, View, String)
で作成されたActivityOptionsバンドルを送信または受信して、アクティビティがアクティビティ遷移を実行できるようにします。
そして _Window.FEATURE_CONTENT_TRANSITIONS
_ のドキュメントはこう言います:
ウィンドウコンテンツの変更が
TransitionManager
を使用してアニメーション化されることを要求するためのフラグ。
TransitionManager
はsetTransitionManager(TransitionManager)
を使用して設定されます。何も設定されていない場合、デフォルトのTransitionManager
が使用されます。
ドキュメントには、次の Window
メソッドには_FEATURE_ACTIVITY_TRANSITIONS
_フラグを有効にする必要があると記載されていますが、_FEATURE_CONTENT_TRANSITIONS
_を有効にする必要があるかどうかについては何も述べていません。よく( ソースコード によると、_FEATURE_ACTIVITY_TRANSITIONS
_はtrue
であり、_FEATURE_CONTENT_TRANSITIONS
_はマテリアルをテーマとするアプリケーションのデフォルトではfalse
です) :
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
_を有効にする必要があると述べています。
だからここに私の質問があります:
FEATURE_ACTIVITY_TRANSITIONS
_が有効で_FEATURE_CONTENT_TRANSITIONS
_が無効になっているのはなぜですか? _FEATURE_CONTENT_TRANSITIONS
_フラグを有効にする必要があるのはいつですか?FEATURE_ACTIVITY_TRANSITIONS
_を無効にして_FEATURE_CONTENT_TRANSITIONS
_を有効にすることは理にかなっていますか?または、_FEATURE_CONTENT_TRANSITIONS
_も_FEATURE_ACTIVITY_TRANSITIONS
_を有効にする必要がありますか?ありがとう!
ドキュメントが明確ではないため、これらの質問に答える機会を得られてうれしいです。
初期には、両方の機能を処理する1つのフラグFEATURE_CONTENT_TRANSITIONS
がありました。有効にしたときにMaterialアプリケーションが予期しない動作をしたときに、それらを分割します。そのため、一部の古いドキュメントでは、FEATURE_CONTENT_TRANSITIONS
を意味する場合、アクティビティの遷移を取得するにはFEATURE_ACTIVITY_TRANSITIONS
を有効にする必要があるとまだ記載されている場合があります。
- これら2つのフラグの違いは何ですか?このコンテキストでの「アクティビティ遷移」と「コンテンツ遷移」の違いは何ですか?
このコンテキストでのアクティビティ遷移は、ActivityOptions.makeSceneTransitionAnimation
から作成されたバンドルを使用してstartActivity
を呼び出すか、またはアクティビティがそのバンドルで開始されたことを意味します。アクティビティ遷移はレイアウトを変更するため(たとえば、要素のフェードイン、共有要素の移動など)、アクティビティが気に入らない場合は、FEATURE_ACTIVITY_TRANSITIONS
を無効にする必要があります。
コンテンツ遷移では、TransitionManager
を呼び出すときにsetContentView
を使用します(初回以外)。通常、クロスフェードが発生しますが、アクティビティのコンテンツにIDの共有やtransitionName
の使用などの共通点がある場合、それらのビュー間でChangeBounds
の動作が得られます。 XMLまたはコードを使用して、ウィンドウに関連付けられているTransitionManager
をカスタマイズすることにより、遷移の詳細を変更できます。
- デフォルトで
FEATURE_ACTIVITY_TRANSITIONS
が有効になっていてFEATURE_CONTENT_TRANSITIONS
が無効になっているのはなぜですか?実際にFEATURE_CONTENT_TRANSITIONS
フラグを有効にする必要があるのはいつですか?
FEATURE_CONTENT_TRANSITIONS
は、コンテンツが変更されたときにTransitionManagerを使用します。デフォルトでは、これはクロスフェードであり、一部のアプリケーションでは非常に悪かった。一方、FEATURE_ACTIVITY_TRANSITIONS
はデフォルトでほとんどのアプリケーションに対して何もしません。その方法でアクティビティを開始することを選択する必要があるので、オンにしても安全です。
FEATURE_ACTIVITY_TRANSITIONS
を無効にしてFEATURE_CONTENT_TRANSITIONS
を有効にすることは理にかなっていますか?または、FEATURE_CONTENT_TRANSITIONS
ではFEATURE_ACTIVITY_TRANSITIONS
も有効にする必要がありますか?
はい、可能性は低いです。アプリケーションがFEATURE_CONTENT_TRANSITIONS
を気に入っている場合は、FEATURE_ACTIVITY_TRANSITIONS
でも問題なく機能するはずです。共有要素を使用してユーザーがアクティビティを呼び出せないように明示的に制限する場合、または標準の開始遷移効果が気に入らない場合は、それを無効にして、他のアプリケーションが呼び出されたときの効果を防ぐことができます。