マウイにはすでに完全なアニメーションAPIがあり、ページ上にライブで流動的なコンテンツを作成できます。 ただし、ページ間を移動するとどうなりますか?
この仕様は、マウイトランジションAPIを定義してい
従来のトランジションの場合、サポートされているトランジションを含む新しい列挙が必要です。
public enum NavigationTransitionType
{
None,
Fade,
Flip,
Scale,
SlideFromLeft,
SlideFromRight,
SlideFromTop,
SlideFromBottom,
Turnstile
}
また、NavigationPageとShellを使用してページを遷移できるように、ページに新しいプロパティを含めます。
public static readonly BindableProperty TransitionTypeProperty =
BindableProperty.Create(nameof(TransitionType), typeof(NavigationTransitionType), typeof(NavigationPage), PageTransitionType.None,
BindingMode.TwoWay, null);
public NavigationTransitionType TransitionType
{
get { return (NavigationTransitionType)GetValue(TransitionTypeProperty); }
set { SetValue(TransitionTypeProperty, value); }
}
public static readonly BindableProperty TransitionDurationProperty =
BindableProperty.Create(nameof(TransitionDuration), typeof(double), typeof(NavigationPage), 500d,
BindingMode.TwoWay, null);
public double TransitionDuration
{
get { return (double)GetValue(TransitionDurationProperty); }
set { SetValue(TransitionDurationProperty, value); }
}
一方、共有要素の遷移を許可する方法が必要です。 重要なのは、2つの異なるページで利用可能な同じアイテムを「リンク」する方法です。
Viewから継承されたサポートされている要素にTransitionTag添付プロパティがあります。
public static readonly BindableProperty TransitionTagProperty =
BindableProperty.CreateAttached("TransitionTag", typeof(int), typeof(Transition), 0,
propertyChanged: OnPropertyChanged);
用途は次のとおりです。
<Image Source="xamarin.jpg" TransitionTag="logo" WidthRequest="100" />
ソースページで遷移するコントロールにタグを付けます。
<Image Source="xamarin.jpg" TransitionTag="logo" WidthRequest="300" />
そして、宛先ページで遷移するコントロールにタグを付けます。
いくつかの例を見てみましょう。
ページ間の遷移を使用したサンプル:
<ContentPage
TransitionType=“SlideFromBottom”
TransitionDuration="750" />
共有遷移要素を使用したサンプル:
ページ1:
<Image
Source="xamagon_preview.png"
TransitionTag="xamagon"/>
2ページ:
<Image
Source="xamagon.png"
TransitionTag="xamagon"/>
TransitionTag
が一致している必要があります。TransitionTag
は一意である必要があります。おそらく、 enum
代わりにアニメーションを受け取るプロパティですか?
ITransitionAnimation
インターフェイスを実装する必要があるカスタマイズされたアニメーションを拡張および受信できるようにするため。
そして、フォントでNamedSize
ように使用するいくつかの事前定義されたアニメーション
例:
<ContentPage
Transition=“{local:MyCustomTransition}"
TransitionDuration="750" />
または事前定義された「名前付きトランジション」
<ContentPage
Transition=“Fade"
TransitionDuration="750" />
共有トランジションに関しては、アイテムのリスト(たとえば、Collectionview)からトランジションを作成する場合、「TransitionTag」プロパティでは、アニメーション化するビューを識別するのに十分ではないことに注意してください。
画像とテキストを含むアイテムのリストを含むDataTemplateを想像してみてください。すべての画像は異なりますが、TransitionTagは常に同じです(例: "ImageToTransition")。
要素をタップするとき、ナビゲーションレンダラーは、どの要素を翻訳する必要があるかを正確に知る必要があります。CollectionView内のすべての画像に単一のタグがある場合、これは問題になる可能性があります。
私のプラグインでは、翻訳する要素を識別するために使用するTransitionGroupプロパティを使用して解決しました。
この機能に貢献したいのですが、Android用のコードは十分に安定していません(TabbedPages / MasterPageを使用するとChildFragmentsに問題がありますが、シェルでは問題ないと思います)、iOSでもいくつかのハックを使用して適切なトランジションシェイプを作成します。
私は最初のバージョンから多くのコードを作り直し、今では見栄えが良くなっていますが、コアに入るのに十分ではないと思いますが、必要に応じて支援し、貢献する準備ができています
https://github.com/GiampaoloGabba/Xamarin.Plugin.SharedTransitions
ところで、いくつかのプロパティをメインコアに統合できれば、私のコードの多くは大幅に簡素化される可能性があります
@felipebaltazar TabViewでカスタムトランジションを作成するという提案に似ている可能性がありますhttps://github.com/xamarin/Xamarin.Forms/issues/10773いくつかのテストを行い、その後、仕様を確認します。
@GiampaoloGabbaこのAPIに関するフィードバックがあることは間違いなく素晴らしいことです。 Xamarin.Formsのように貢献したい場合は、PRを受け付け、喜んでお手伝いします。 あなたがコレクションに指定するパラメータについて、私はそれをレビューしました、そしてあなたは正しいです。 Mnn、これらのケースをカバーするためにプロパティを追加することができます( TransitionGroup
)。または、要素の親がコレクションである場合は内部的に、グループを自動的に作成します。
または、要素の親がコレクションである場合は内部的に、グループを自動的に作成します。
私はこのアプローチを試しましたが、少し難しかったです。 たとえば、コレクションビューでは、SelectedItemの変更に基づいてナビゲーションを開始できます。
グループ化のためにプロパティを「平手打ち」して、ユーザーがいつどのように使用するかを決定できるようにする方がはるかに簡単でした:)
ところで、私はこれを開発するために使用した基本アーキテクチャをカバーする小さなドキュメントをここに書くことを計画しています(遷移を追跡する方法とiOSでそれを実現する方法、それに対するネイティブサポートがなく、すべてを手作業で開発する必要があったため) 、Androidでははるかに簡単ですが、tappedpageとMasterDetailによって生成された子フラグメントを除外すると)
ここに移植して悪いアイデアを除外するための良いアイデアがあるかもしれない場合に備えて、きっとたくさんあるでしょう:)
いいですね
@felipebaltazar TabView xamarin / Xamarin.Forms#10773でカスタムトランジションを作成するという提案に似ている可能性があります。いくつかのテストを行い、その後、仕様を確認します。
いいですね!!!!
Xamarin.Forms.Skeleton
リポジトリでいくつかのアニメーションを作成しましたが、新しいアイデアに役立つかもしれません...わかりません...
最も参考になるコメント
共有トランジションに関しては、アイテムのリスト(たとえば、Collectionview)からトランジションを作成する場合、「TransitionTag」プロパティでは、アニメーション化するビューを識別するのに十分ではないことに注意してください。
画像とテキストを含むアイテムのリストを含むDataTemplateを想像してみてください。すべての画像は異なりますが、TransitionTagは常に同じです(例: "ImageToTransition")。
要素をタップするとき、ナビゲーションレンダラーは、どの要素を翻訳する必要があるかを正確に知る必要があります。CollectionView内のすべての画像に単一のタグがある場合、これは問題になる可能性があります。
私のプラグインでは、翻訳する要素を識別するために使用するTransitionGroupプロパティを使用して解決しました。
この機能に貢献したいのですが、Android用のコードは十分に安定していません(TabbedPages / MasterPageを使用するとChildFragmentsに問題がありますが、シェルでは問題ないと思います)、iOSでもいくつかのハックを使用して適切なトランジションシェイプを作成します。
私は最初のバージョンから多くのコードを作り直し、今では見栄えが良くなっていますが、コアに入るのに十分ではないと思いますが、必要に応じて支援し、貢献する準備ができています
https://github.com/GiampaoloGabba/Xamarin.Plugin.SharedTransitions