Artículo
|
Evento Flick Windows Phone 7 |
Conceptualmente hay dos tipos de Flick uno empieza cuando el usuario toca la pantalla y el otro ocurre al final de un Pan, sin embargo si trsladamos esto a código podemos pensar que ambos ocurren al final de un pan, para el primero es un pan con distancia cero, por esta razón voy a construir el behaivor para el gesto Flick a partir del behaivor Pan.
Le vamos a denominar FlickAction y para detectar esta acción deberemos saber la velocidad con la que el dedo del usuario estaba moviéndose en el momento que soltó el dedo de la pantalla. Los eventos de Mouse que hemos ido utilizando no nos sirven ya que no nos ofrecen este detalle. Windows Phone expone otros eventos diferentes a los que tiene Silverlight 3, estos eventos nos proporciona información asociada a los gestos del usuario ManipulationStarted , ManipulationDelta , y ManipulationCompleted . ManipulationStarted es lanzado cuando comienza un evento de “manipulación”, es decir, el usuario toca la pantalla en uno o mas puntos, cuando el usuario cambia de posición el dedo se lanza el evento ManipulationDelta, por último cuando se suelta uno o mas dedos de la pantalla se lanza el evento ManipulationCompleted
Para nuestro behaivor deberemos de implementar el evento ManipulationCompleted porque expone la propiedad FinalVelocities que nos indica la velocidad (en unidades de pantalla por segundo) que el usuario soltó el dedo de la pantalla. Para este behaivor vamos a simular un drift effect muy sencillo sin implementar fisica.
Este behaivor expondrá la propiedad FlickDurationInMilliseconds que sera la cantidad de tiempo que el control continuara moviéndose despues de que el usuario suelte el dedo.
El XAML en este caso es el mismo que el anterior artículo solo que cambiamos el behaivor PanAction por FlickAction.
Autor del artículo: Oscar Álvarez

Le vamos a denominar FlickAction y para detectar esta acción deberemos saber la velocidad con la que el dedo del usuario estaba moviéndose en el momento que soltó el dedo de la pantalla. Los eventos de Mouse que hemos ido utilizando no nos sirven ya que no nos ofrecen este detalle. Windows Phone expone otros eventos diferentes a los que tiene Silverlight 3, estos eventos nos proporciona información asociada a los gestos del usuario ManipulationStarted , ManipulationDelta , y ManipulationCompleted . ManipulationStarted es lanzado cuando comienza un evento de “manipulación”, es decir, el usuario toca la pantalla en uno o mas puntos, cuando el usuario cambia de posición el dedo se lanza el evento ManipulationDelta, por último cuando se suelta uno o mas dedos de la pantalla se lanza el evento ManipulationCompleted
Para nuestro behaivor deberemos de implementar el evento ManipulationCompleted porque expone la propiedad FinalVelocities que nos indica la velocidad (en unidades de pantalla por segundo) que el usuario soltó el dedo de la pantalla. Para este behaivor vamos a simular un drift effect muy sencillo sin implementar fisica.
Este behaivor expondrá la propiedad FlickDurationInMilliseconds que sera la cantidad de tiempo que el control continuara moviéndose despues de que el usuario suelte el dedo.
public class FlickAction : PanAction {
private const int Increments = 10;
private const double Deceleration = 0.4;
DispatcherTimer timer = new DispatcherTimer();
public int Counter { get; set; }
private Point ReleaseVelocity { get; set; }
public int FlickDurationInMilliseconds{
get { return (int)GetValue(FlickDurationInMillisecondsProperty); }
set { SetValue(FlickDurationInMillisecondsProperty, value); }
}
public static readonly DependencyProperty FlickDurationInMillisecondsProperty =
DependencyProperty.Register("FlickDurationInMilliseconds",
typeof(int), typeof(FlickAction),
new PropertyMetadata(500));
public FlickAction(){
timer.Tick += new EventHandler(timer_Tick);
}
protected override void OnAttached(){
base.OnAttached();
this.AssociatedObject.ManipulationStarted += AO_ManipulationStarted;
this.AssociatedObject.ManipulationCompleted += AO_ManipulationCompleted;
}
protected override void OnDetaching(){
this.AssociatedObject.ManipulationStarted -= AO_ManipulationStarted;
this.AssociatedObject.ManipulationCompleted -= AO_ManipulationCompleted;
base.OnDetaching();
}
void timer_Tick(object sender, EventArgs e){
Counter--;
if (Counter == 0){
timer.Stop();
}
MoveSelectedItems(ReleaseVelocity.X / 100, ReleaseVelocity.Y / 100);
ReleaseVelocity = new Point(ReleaseVelocity.X * Deceleration,
ReleaseVelocity.Y * Deceleration);
}
void AO_ManipulationStarted(object sender, ManipulationStartedEventArgs e) {
timer.Stop();
}
void AO_ManipulationCompleted(object sender,
ManipulationCompletedEventArgs e){
ReleaseVelocity = e.FinalVelocities.LinearVelocity;
timer.Interval = new TimeSpan(0, 0, 0, 0,
FlickDurationInMilliseconds / Increments);
Counter = Increments;
timer.Start();
}
}
El XAML en este caso es el mismo que el anterior artículo solo que cambiamos el behaivor PanAction por FlickAction.
Autor del artículo: Oscar Álvarez
![]() |
Publicado por: Angel Carrero |
|
|
Comentarios
Últimas noticias
· factura
Últimos artículos














































