4

Bing マップ コントロールがあり、マップ上に描画されたピンの位置をアニメーション化したいと考えています。

理想的には、次のようなコードを書きたいと思います。

// Image myPin = some Image on the map layer;

var sb = new Storyboard();
var duration = DurationHelper.FromTimeSpan(System.TimeSpan.FromMilliseconds(1000));
sb.Duration = duration;

LocationAnimation ani = new LocationAnimation();
ani.To = new Location(33.3, 11.1); // destination lat, lng
ani.Duration = duration;

sb.Children.Add(ani);
Storyboard.SetTarget(ani, myPin);
Storyboard.SetTargetProperty(ani, "MapLayer.Position");

Resources.Add("moveMyPin", sb);
sb.Begin();

もちろんLocationAnimation、フレームワークにはクラスはありません。似たようなものがいくつかあります。タイプでPointAnimation機能し、個々の値で機能します。PointDoubleAnimationdouble

派生クラスを実装する必要がTimelineあると思いましたが、これまでに見つけたドキュメントはこの点で役に立たず、どこから始めればよいかわかりません。

*Animation クラスの準備ができていないプロパティをアニメーション化する方法は? 何か不足していますか?

更新:次のようなことができると思います

// let aniX and aniY be two DoubleAnimation objects
StoryBoard.SetTargetProperty(aniX, "(MapLayer.Position).Latitude")
StoryBoard.SetTargetProperty(aniY, "(MapLayer.Position).Longitude")

しかし、添付プロパティをアニメーション化する方法がわからず、「指定されたオブジェクトの TargetProperty (MapLayer.Position).Latitude を解決できません」などの例外が常に発生するため、別の問題があります。

したがって、問題は次のようになると思います:添付プロパティのプロパティ パスを指定する方法は?

さらなる更新:依存アニメーションを作成するため、「SetTargetProperty」のことで間違ったリードをしている可能性があります(コメントのリンクを参照)。マーカーピンを座標先にアニメーション化するより良い方法はありますか?

更新 3 : Jared が指摘したように、アニメーション化を試みるRenderTransformか、トランジションを使用して結果を達成することができます。私はすでにこの方法を行っていましたが、それは私の解決策ではないようです。これは私が見つけたものです:

  • を使用RepositionThemeAnimationすると、ピンの新しいピクセル位置を指定する必要があるようです。これにはいくつかの理由があります。まず、ピンの緯度/経度の宛先はわかっていますが、投影法を計算する必要があります (投影法を操作するためのパブリック インターフェイスがないと私が知る限り)。第 2 に、マップがズーム/パンすると、投影自体が変化する可能性があります。アニメーションの終了時のピクセルの宛先は、最初のピクセルの宛先と同じにすることはできませんでした。私のシナリオでは、アニメーションの発生中にマップが移動している可能性が非常に高いため、これは大きな問題です。
  • RepositionThemeTransitionすべての奇妙なピクセル/投影の問題を使用すると、解決しました。これまでのところ、期待どおりのアニメーションを見ることができた唯一の方法です。トランジションを設定し、(MapLayer.SetPosition を介して) タグの新しい緯度/経度位置を設定しました。ただし、2 つの大きな問題があります。アニメーションの継続時間 (およびイージング機能) を設定できません。そして最も重要なことは、ピンが最終位置に到達したときにコードを実行する方法が見当たらないことです。
4

2 に答える 2

1

わかりました、あなたの問題は Bing Maps とは関係ありません。これは、指定しない限りアニメーション化できない依存関係プロパティに関連しています。方法は次のとおりです: http://blog.jerrynixon.com/2012/06/windows-8-animated-pie-slice.html

チャールズのサイトとの他の回答のリンクは最新ではありません。

于 2012-10-18T16:12:39.193 に答える
1

添付プロパティはアニメーション化できますが、名前を括弧で囲む必要があります。ここで例を見てください:

http://www.charlespetzold.com/blog/2007/09/080231.html

ただし、これは値全体 (場所) を設定する場合にのみ機能し、サブプロパティ (緯度と経度) を設定できない可能性があると思います。

あなたがやろうとしていることについてもっと情報を提供できるかどうか疑問に思っています。これは一時的なアニメーションですか?つまり、入場時または退場時にピンをアニメーション化する必要がありますか? その場合は、代わりに RenderTransform X と Y でアニメーションを実行できます。実際にピンの位置を変更することはありませんが、RenderTransform を使用してピンが描画される場所を一時的に変更できます。

さらに良いことに、現在フレームワークに組み込まれている無料のアニメーションをうまく利用できるかもしれません。それらを使用するためにストーリーボードも必要ありません。次のように要素に正しく設定するだけです。

<Button Content="Transitioning Button">
     <Button.Transitions>
         <TransitionCollection> 
             <EntranceThemeTransition/>
         </TransitionCollection>
     </Button.Transitions>
</Button>

アニメーション ライブラリのその他の例と、多くのアニメーションのビデオ プレビューについては、次を参照してください。

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452703.aspx

于 2012-08-01T22:31:06.003 に答える