uwp 图片切换动画

时间:2023-03-08 17:17:56
uwp 图片切换动画

最近在学习安卓,LOL自定义战绩项目近乎停工,而且腾旭把界面全改了,好烦。刚好学习到安卓中的图片切换动画,我就想在LOL项目中实现一个。首先上百度查看一下,妈的,资料少的可怜。

还是自己来吧。自定义控件走一波

效果图uwp 图片切换动画

新建自定义控件

直接改模板文件 把里面换成一个image source绑定到依赖属性上

<Style TargetType="control:ImageDisplayer">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="control:ImageDisplayer">
<Image x:Name="image" Width="" Height="" Source="{TemplateBinding ImageSourceNormal}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

在cs文件里添加字段

//这个定时器用来控制图片切换 
DispatcherTimer time = new DispatcherTimer();
//静态字段 image指模板中的image控件
private static Image image;
int i = 1;

添加依赖属性

 #region dependencyProperty
/// <summary>
/// 用于显示的Image绑定的Source属性
/// </summary>
public ImageSource ImageSourceNormal
{
get { return (ImageSource)GetValue(ImageSourceNormalProperty); }
set { SetValue(ImageSourceNormalProperty, value); }
}
public static readonly DependencyProperty ImageSourceNormalProperty = DependencyProperty.Register("ImageSourceNormal", typeof(ImageSource), typeof(ImageDisplayer), new PropertyMetadata(null));
#endregion

添加属性

 #region property
/// <summary>
/// 是否在显示动画
/// </summary>
public bool IsShow { get; private set; }
/// <summary>
/// List<BitmapImage> Images循环显示的集合
/// </summary>
public List<BitmapImage> Images { get; set; }
#endregion

重写OnApplyTemplate()方法

 /// <summary>
/// 重用模板时启用
/// </summary>
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
//在这里将image指向模板中的iamge控件
image = GetTemplateChild("image") as Image;
//注册time的Tick事件 忽略timer少的那个r 写错了 不想改了 就是这么任性
time.Tick += Time_Tick;
time.Interval = TimeSpan.FromMilliseconds(100);
}

  在tick事件里处理图片切换

  /// <summary>
/// 计时器操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void Time_Tick(object sender, object e)
{
if (image == null||Images==null)
{
time.Stop();
IsShow = false;
return;
}
if (i >= Images.Count)
{
i = ;
}
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
ImageSourceNormal = Images[i];
});
i++;
}

写控件的使用与停止方法

 /// <summary>
/// 开始计时器
/// </summary>
public void Show()
{
time.Start();
IsShow = true;
}
/// <summary>
/// 停止计时器
/// </summary>
public void Stop()
{
time.Stop();
}

现在,这个控件就可以使用了

在页面上添加一个引用

 <local2:ImageDisplayer x:Name="display"/>

当你想显示动画的时候这样做

//这个list就是图片的集合 图片的命名要规范点 像teemo_1.jpg teemo_2.jpg
List<BitmapImage> list = new List<BitmapImage>();
for (int i = ; i < ; i++)
{
//初始化图片集合
BitmapImage image = new BitmapImage(new Uri(string.Format("ms-appx:///Resources/teemo_{0}.png", i)));
list.Add(image);
}
display.Images = list;
display.Show();

//停止动画的时候调用这个方法

display.Stop();

 完成;

写的不好,请多理解

gayhub地址:https://github.com/hei12138/LOL-/tree/master/Mycontrols

这是一个类库项目,里面也有我自定义的一些其他控件

新手,欢迎交流 1329698854@qq.com