Udostępnij za pośrednictwem


Новое место для проектов Windows Phone 7…

Грэг Дункан

Сайт CodePlex одно из самых (самое?) главных мест, где можно найти проекты по Windows Phone 7. Это место отвечает основным требованиям большинства программистов, предоставляя свободно доступные проекты, которые могут содержать исходные коды, исполняемые файлы, документацию, рабочие элементы, обсуждения и которые прямо встраиваются в Visual Studio. Тем не менее, все люди разные и имеют различные потребности и предпочтения.

Однако появилось новое место, во всяком случае, для разработчиков Windows Phone 7, где могут располагаться такие проекты. Место, которое многие из орбиты Microsoft могли бы не рассматривать или даже не слышать о нем, но которое в ретроспективе можно понять…

Кто же завел такой загадочный сайт для проектов? Nokia! Да, это Nokia.

clip_image002

И достаточно удивительно, что сегодняшний проект находится там и пришел к нам через комментарий, оставленный в предыдущем сообщении.

Ватерпас на Silverlight

Простой пример на Silverlight демонстрирует использование акселерометров для вычисления наклона устройства и представление результатов в виде традиционного ватерпаса.

General

Ватерпас на Silverlight является переносом приложения Qt Bubble Level на Silverlight. Подробнее о переносе можно прочитать на странице, описывающей историю портирования.

clip_image004

Специально стоит отметить страницы wiki, где можно найти замечательную историю о том, как создавался проект, и как было выполнено портирование.

clip_image006

clip_image008

Это простое приложение, но порой простота – это все, что вам нужно (количество – не главное). Вот снимок проекта и фрагмент кода.

clip_image010

 

 /// <summary>
/// Updates the position of the bubble in the glass tube.
/// </summary>
/// <param name="e">Contains the accelerometer reading value.</param>
protected void UpdateBubble(AccelerometerReadingEventArgs e)
{     
     const double RADIANS_TO_DEGREE = 57.2957795;
     double divider = Math.Sqrt(e.X * e.X + e.Y * e.Y + e.Z * e.Z);
     // Calculating the angle + using low pass factor 20 %.
     // Values from all three accelerometers are used to get more precise reading on y-axis.
     m_Angle += (Math.Acos(e.Y / divider) * RADIANS_TO_DEGREE - 90 - m_Angle) * 0.2;
     double angle;
     // Depending on the orientation, invert the accelerometer value
     if (Orientation == PageOrientation.LandscapeLeft)
     {
         angle = -m_Angle + m_CalibrationFactor;
     }
     else
     {
         angle = m_Angle - m_CalibrationFactor;
     }
      const double MAX_ANGLE = 20.0;
      // Restrict the angle value to the range -20 and 20 degrees.
     if (angle > MAX_ANGLE)
     {
         angle = MAX_ANGLE;
     }
     else if (angle < -MAX_ANGLE)
     {
         angle = -MAX_ANGLE;
     }
      // Set the bubble position.
     BubbleTransform.X = angle / MAX_ANGLE * (Reflection.Width / 2 - Bubble.Width / 2);
}