【发布时间】:2011-01-22 00:59:47
【问题描述】:
我尝试使用 Toolkit 进行页面转换,但所有动画都卡顿了。在另一个问题中,有人建议我不要使用工具包,所以我自己实现了所有动画并手动触发它们。例如导航到另一个页面:
void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBox listBox = sender as ListBox;
if (null == listBox) return;
Data.Category item = listBox.SelectedItem as Data.Category;
if (null == item) return;
Uri uri = new Uri(App.MakeResourcePathTo(item.Page), UriKind.Relative);
Storyboard storyboard = Application.Current.Resources["FlipForwardOut"] as Storyboard;
Storyboard.SetTarget(storyboard, LayoutRoot);
EventHandler completedHandler = delegate { };
completedHandler = delegate
{
NavigationService.Navigate(uri);
storyboard.Stop();
storyboard.Completed -= completedHandler;
};
storyboard.Completed += completedHandler;
storyboard.Begin();
listBox.SelectedIndex = -1;
}
代码正常吗? 据我了解,不应该有其他任何东西与该代码并行运行。这正是我想要的,因为这样就不会干扰我的动画并使其变慢。
这是另一个代码 sn-p。这显示了我如何处理后退动画。
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
Storyboard storyboard = Application.Current.Resources["FlipBackwardOut"] as Storyboard;
Storyboard.SetTarget(storyboard, LayoutRoot);
EventHandler completedHandler = delegate { };
completedHandler = delegate
{
storyboard.Stop();
storyboard.Completed -= completedHandler;
NavigationService.GoBack();
};
storyboard.Completed += completedHandler;
storyboard.Begin();
}
该代码有什么问题,可能导致性能问题吗?
动画很简单,只有线性动画:
<Storyboard x:Key="FlipForwardOut">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">
<LinearDoubleKeyFrame KeyTime="0" Value="0"/>
<LinearDoubleKeyFrame KeyTime="0:0:0.4" Value="70"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)">
<LinearDoubleKeyFrame KeyTime="0" Value="1"/>
<LinearDoubleKeyFrame KeyTime="0:0:0.4" Value="0.1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
我认识到一件事:当我导航到全景页面时,全景页面的动画与我的页面转换动画并行运行。全景页面的烘焙动画让标题滑入,全景项目也滑入到位。因此,有一些平移动画与我的页面转换(基本上是旋转和不透明度)平行运行。 我能否以某种方式阻止全景图播放它自己的动画,或者将它们延迟到我的页面过渡动画完成为止?
我的页面转换还有另一个问题:当我导航到另一个页面并播放动画时,当动画完成时(LayoutRoot 已旋转到 Y=70,并且它的 opacity=0)然后显示原始布局几毫秒(LayoutRoot 旋转 Y=0 和 opacity=1),然后导航到下一页,下一页的动画开始。 这是为什么呢?
我希望有人可以帮助我。 在花了这么多小时后,我感到非常沮丧。无论我尝试了什么,动画都表现不佳,它们在模拟器和设备上都卡顿了。 手机预装应用的动画动画流畅。我不明白这一点。 :(
【问题讨论】:
-
我还在考虑使用 WriteableBitmap 来制作我的控件的屏幕截图并为其设置动画。将是我不想做的额外工作,只是为了获得流畅的动画。但是,它不能修复卡顿的全景图的烘焙动画。
标签: silverlight performance animation windows-phone-7