2011-04-15 8 views
7

que han aplicado la animación del movimiento de un control de la red de la siguiente manera:mejorar la suavidad de la animación (movimiento de los controles)

<Grid 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.Style> 
    <Style TargetType="Grid"> 
     <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding ElementName=rootLayout, Path=IsVisible}" 
      Value="True"> 
      <DataTrigger.EnterActions> 
      <BeginStoryboard> 
       <Storyboard> 
       <ThicknessAnimation 
        Storyboard.TargetProperty="Margin"      
        From="-500,0,0,0" 
        To="0,0,0,0" 
        Duration="0:0:0.5" /> 
       </Storyboard> 
      </BeginStoryboard> 
      </DataTrigger.EnterActions> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Grid.Style> 

    <Border 
     Grid.RowSpan="2" 
     Background="Black" 
     CornerRadius="6" >   
    <Border.Effect> 
     <DropShadowEffect /> 
    </Border.Effect> 
    </Border> 

    <TextBlock 
     Grid.Row="0" 
     Width="400" 
     Height="200" 
     Margin="20,20,20,10" 
     Text="{Binding Path=MessageText}" /> 

    <Button 
     Grid.Row="1" 
     Margin="20,5,20,15" 
     HorizontalAlignment="Right" 
     Width="75" 
     Content="OK" 
     Command="{Binding Path=CloseDialogCommand}" /> 

</Grid> 

La animación trabaja muy bien, pero es feo. Es tembloroso/nervioso/espasmódico y realmente parece poco profesional. ¿Hay alguna manera de mejorar esto? ¿Estoy usando el enfoque correcto para animar el cambio de valor en la propiedad Margin para mover la cuadrícula? He leído sobre RenderTransform, pero no sé cómo usarlo en mi caso.

Además, la animación no es natural. Sé que esto se puede mejorar, pero no sé cómo. ¿Cuáles son estas propiedades y pueden ayudarme a mejorar mi animación:

  • AccelerationRatio
  • DecelerationRatio
  • EasingFunction
  • IsAdditive
  • IsCumulative
  • SpeedRatio

¡Gracias por ayudarme!

P.S. Estoy tratando de poner la mayor cantidad de código posible en XAML, por lo que preferiría ese enfoque, pero en realidad, si hay algo para mejorar esto ...

Respuesta

11

Utilice funciones de aceleración, una simple DoubleAnimation y RenderTransform, p.

<Button Content="Test"> 
    <Button.RenderTransform> 
     <TranslateTransform/> 
    </Button.RenderTransform> 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Button.Click"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="RenderTransform.X" 
            From="-500" To="0"> 
         <DoubleAnimation.EasingFunction> 
          <CubicEase EasingMode="EaseOut"/> 
         </DoubleAnimation.EasingFunction> 
        </DoubleAnimation> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 

Esto debería ser bastante suave, echa un vistazo a this overview en funciones de aceleración para tener una idea de cómo afectan a la animación.

También tenga en cuenta que la duración tiene un fuerte efecto sobre cómo se ve una animación, dependiendo de qué función de suavizado utilice estableciendo valores de alta duración porque se ralentizan significativamente al final.

+0

Gracias, esto ha mejorado mi animación. Sin embargo, una nota es que la ejecución de la animación en términos de temblores es la misma, pero creo que se debe a un tiempo de duración bastante corto, por lo que la transformación de renderizado o la animación de grosor parecen producir el mismo resultado en lo que respecta a eso. El enlace que ha proporcionado es muy útil, gracias especialmente por eso. – Boris

+0

Encontré una página donde se explica cómo afectar una velocidad de cuadros de la aplicación WPF. El artículo de la página realmente explica cómo reducir la velocidad de cuadros, pero en mi caso necesito lo contrario. Por lo tanto, aumenté la velocidad de fotogramas de 60 a 120 por defecto y ahora las animaciones de la aplicación funcionan como un amuleto. Aquí está el enlace al artículo http://marlongrech.wordpress.com/2008/06/13/wpf-reducing-cpu-consumption-for-animations/ – Boris

+0

La pregunta es cuántos usuarios se beneficiarán de eso, si la pantalla lo hace no es compatible con una frecuencia de actualización suficientemente alta, se verá * peor * que con 60 fps. (Estimo que en la gran mayoría de las computadoras portátiles tienen una frecuencia de actualización de 60Hz para la cual es probable que el valor predeterminado sea el mejor, incluso para PC de escritorio, sospecho que normalmente no se encuentran motores con tasas superiores a 96Hz, con frecuencia) –

Cuestiones relacionadas