@Andy Sinclair's answer is a good starting point (as are the docs), but if you want to animate a map pin (with lat, long, and possibly bearing), you'll need to animate each scalar value separately, like so:
var position = yourTargetPinPosition;
new Animation {
// Animate the change in latitude
{ 0, 1, new Animation(lat => pin.Position = new Position(lat, pin.Position.Longitude), pin.Position.Latitude, position.Latitude) },
// Animate the change in longitude
{ 0, 1, new Animation(lng => pin.Position = new Position(pin.Position.Latitude, lng), pin.Position.Longitude, position.Longitude) }
// Play the animation over 2000ms with a new frame every 16ms
}.Commit(map, "PinAnimation", 16, 2000, Easing.SinInOut, (v, c) => {
// If the animation is cancelled for any reason, update the pin position to the target value
if (c) {
pin.Position = position;
}
// Optionally, pan the map to the new position after the animation is complete
var mapSpan = new MapSpan(position, 0.01, 0.01);
map.MoveToRegion(mapSpan);
}, () => false);