zoukankan      html  css  js  c++  java
  • 【WP8】仿QQ提示消息

    WP版的QQ提示消息的时候从顶部滑入,3秒后从顶部滑出,本文模仿该效果实现一个MessageToastManager类用于显示提示消息

    思路很简单,就是动画而已,支持配置颜色和回掉

    // *************************************************
    // 
    // 作者:bomo
    // 小组:WP开发组
    // 创建日期:2014/7/7 15:18:12
    // 版本号:V1.00
    // 说明: 
    // 
    // *************************************************
    // 
    // 修改历史: 
    // Date                WhoChanges        Made 
    // 2014/7/7 15:18:12            bomo         Initial creation 
    //
    // *************************************************
    
    using System;
    using System.Diagnostics;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Controls.Primitives;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    
    namespace XTuOne.Utility.Helpers
    {
        /// <summary>
        /// 消息提示工具
        /// </summary>
        public class MessageToastManager
        {
            private static readonly Color defaultForegroundColor = Color.FromArgb(255, 255, 144, 0);
            private static readonly Color defaultBackgroundColor = Colors.White;
    
            public static void Show(string text, Action complete = null, double height = 40)
            {
                Show(text, defaultForegroundColor, defaultBackgroundColor, complete, height);
            }
            
            public static void Show(string text, Color foregroundColor, Color backgroundColor, Action complete = null, double height = 40)
            {
                Show(text, new SolidColorBrush(foregroundColor), new SolidColorBrush(backgroundColor), complete, height);
            }
    
            public static void Show(string text, Brush foregroundBrush, Brush backgroundBrush, Action complete = null, double height = 40)
            {
                var p = new Popup
                {
                    Child = new Border
                    {
                        Width = Application.Current.Host.Content.ActualWidth,
                        Background = backgroundBrush,
                        Child = new TextBlock
                        {
                            Text = text,
                            Foreground = foregroundBrush,
                            FontSize = (double)Application.Current.Resources["PhoneFontSizeNormal"],
                            VerticalAlignment = VerticalAlignment.Center,
                            Margin = new Thickness(10, 0, 0, 0)
                        }
                    }
                };
    
                Show(p, complete, height);
            }
    
            private static void Show(Popup popup, Action complete = null, double height = 40)
            {
                if (!(popup.Child.RenderTransform is CompositeTransform))
                {
                    popup.Child.RenderTransform = new CompositeTransform();
                }
                ((CompositeTransform)popup.Child.RenderTransform).TranslateY = -height;
    
                Debug.Assert(popup.Child is FrameworkElement);
    
                var element =popup.Child as FrameworkElement;
                element.Height = height;
    
                var storyboard = new Storyboard
                {
                    AutoReverse = false
                };
    
                var doubleAnimaionUsingKeyFrames = new DoubleAnimationUsingKeyFrames();
                Storyboard.SetTarget(doubleAnimaionUsingKeyFrames, popup.Child);
                Storyboard.SetTargetProperty(doubleAnimaionUsingKeyFrames, new PropertyPath("(UIElement.Opacity)", new object[0]));
                storyboard.Children.Add(doubleAnimaionUsingKeyFrames);
                
                //0.5秒透明度从0-1
                var doubleKeyFrame = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)),
                    Value = 1,
                    EasingFunction = new CubicEase {EasingMode = EasingMode.EaseOut}
                };
                doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
                doubleKeyFrame = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.4)),
                    Value = 0.995,
                    EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
                };
                doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
                doubleKeyFrame = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3)),
                    Value = 0.1,
                };
                doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
    
    
                
                doubleAnimaionUsingKeyFrames = new DoubleAnimationUsingKeyFrames();
                Storyboard.SetTarget(doubleAnimaionUsingKeyFrames, popup.Child);
                Storyboard.SetTargetProperty(doubleAnimaionUsingKeyFrames, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)", new object[0]));
                storyboard.Children.Add(doubleAnimaionUsingKeyFrames);
                doubleKeyFrame = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)),
                    Value = 0,
                    EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }
                };
                doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
                doubleKeyFrame = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.4)),
                    Value = 0,
                };
                doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
                doubleKeyFrame = new EasingDoubleKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3)),
                    Value = -height,
                    EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
                };
                doubleAnimaionUsingKeyFrames.KeyFrames.Add(doubleKeyFrame);
    
                var objectAnimaionUsingKeyFrames = new ObjectAnimationUsingKeyFrames();
                Storyboard.SetTarget(objectAnimaionUsingKeyFrames, popup);
                Storyboard.SetTargetProperty(objectAnimaionUsingKeyFrames, new PropertyPath("(Popup.IsOpen)", new object[0]));
                storyboard.Children.Add(objectAnimaionUsingKeyFrames);
    
                var discreteObjectKeyFrame = new DiscreteObjectKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0)),
                    Value = true
                };
                objectAnimaionUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame);
                
                discreteObjectKeyFrame = new DiscreteObjectKeyFrame
                {
                    KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(3)),
                    Value = false
                };
                objectAnimaionUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame);
    
                if (complete!=null)
                {
                    storyboard.Completed += (s, e) => complete.Invoke();
                }
    
                storyboard.Begin();
            }
        }
    }

  • 相关阅读:
    Prototype.doc in Netsuite
    中文编码问题(utf8转为中文)
    js 取得 Unix时间戳(Unix timestamp)
    关于'跳墙'
    webex js 判断是否是ie 以及兼容性代码
    VLOOKUP函数对查找内容列排序增加效率
    netsuite动态绑定事件
    netsuite filter的选择框 代码控制
    html js 跨域 p3p
    netsuite 记录类型 权限分配 use permissions
  • 原文地址:https://www.cnblogs.com/bomo/p/3840787.html
Copyright © 2011-2022 走看看