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
機能し、個々の値で機能します。Point
DoubleAnimation
double
派生クラスを実装する必要が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 つの大きな問題があります。アニメーションの継続時間 (およびイージング機能) を設定できません。そして最も重要なことは、ピンが最終位置に到達したときにコードを実行する方法が見当たらないことです。