zoukankan      html  css  js  c++  java
  • uwp 图片切换动画

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

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

    效果图

    新建自定义控件

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

    <Style TargetType="control:ImageDisplayer">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="control:ImageDisplayer">
                        <Image x:Name="image" Width="40" Height="40" 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 = 1;
                }
                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 = 1; i < 9; 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

  • 相关阅读:
    15.Linux的文件结构
    14.管道模型
    13.ubuntu下Qt5无法使用中文的问题解决
    12.时钟与信号
    11.进程控制
    10.设备文件
    [GXOI/GZOI2019]旅行者
    [GXOI/GZOI2019]旧词
    [BJOI2019] 删数
    [BJOI2019] 光线
  • 原文地址:https://www.cnblogs.com/hei12138/p/ImageDisplay.html
Copyright © 2011-2022 走看看