WPF 实现抽奖功能的全屏弹幕滚动效果

编程开发
271
WPF
弹幕效果
全屏弹幕

WPF 程序里怎么实现全屏弹幕滚动效果

某次公司开年会上,为了活跃气氛,使用了一个全屏互动弹幕的软件,挺有意思的。基于微信公众号,微信用户只需要向关注的公众号发送文字、图像或者小视频,大屏幕上面就会以弹幕的方式滚动展现出来,出于爱好闲暇时间自己也就研究了下;

服务端开发:

也不复杂 ,需要一个网站交互服务器(用来接收微信的交互信息、以及新消息推送接口),以及一个微信公众号(可以使用测试号 权限比较高)然后再微信公众平台上面把开发者信息配置好即可(具体配置可以去看微信的开发文档)

客户端开发:

需要 采用轮询或者使用长连接等方式 来定时或实时接收新消息推送 用来展现到界面上


麻烦一点的就是wpf 实现弹幕效果,毕竟不像web端那样有很多弹幕jquery插件 基本都需要自己去实现

以下是自己写的一个弹幕控件类

///自定义控件  
namespace BarrageControlLibrary  
{  
  
    ///   
    /// 纯文字弹幕控件  
    ///   
    public class TextBlockBarrage : TextBlock  
    {  
        TranslateTransform TranslateTransformClass;  
        ///   
        /// 获取或设置控件动画执行时长 秒  
        ///   
        public double FromSeconds { get; set; }  
        ///   
        /// 加载时间  
        ///   
        public DateTime LoadingTime { get; set; }  
        ///   
        /// 运行完毕离左边的距离  
        ///   
        public double Translation_Left { get; set; }  
        ///   
        /// 运行完毕离右边边的距离  
        ///   
        public double Translation_Right { get; set; }  
  
        public bool Enabled { get; set; }  
        ///   
        /// 初始化  
        ///   
        public TextBlockBarrage()  
            : base()  
        {  
  
            LoadingTime = DateTime.Now;  
            TranslateTransformClass = new TranslateTransform();  
            this.RenderTransform = TranslateTransformClass;  
            this.Loaded += new RoutedEventHandler(TextBlockBarrage_Loaded);  
        }  
  
  
  
        ///   
        /// 加载触发时间  
        ///   
        ///   
        ///   
        void TextBlockBarrage_Loaded(object sender, RoutedEventArgs e)  
        {  
            if (TranslateTransformClass == null)  
                return;  
            if (!Enabled)  
            {  
                return;  
            }  
            else  
            {  
                Enabled = false;  
            }  
            //执行时间  
            Duration duration = new Duration(TimeSpan.FromSeconds(FromSeconds));  
            DoubleAnimation da = new DoubleAnimation(Translation_Left, Translation_Right, duration);  
            da.AutoReverse = false;  
            da.FillBehavior = FillBehavior.HoldEnd;  
  
            TranslateTransformClass.BeginAnimation(TranslateTransform.XProperty, da);  
            this.Loaded -= new RoutedEventHandler(TextBlockBarrage_Loaded);  
        }  
  
  
    }  
  
    ///   
    /// 纯图片弹幕控件  
    ///   
    public class ImageBarrage : Image  
    {  
        TranslateTransform TranslateTransformClass;  
        ///   
        /// 获取或设置控件动画执行时长 秒  
        ///   
        public double FromSeconds { get; set; }  
        ///   
        /// 加载时间  
        ///   
        public DateTime LoadingTime { get; set; }  
        ///   
        /// 运行完毕离左边的距离  
        ///   
        public double Translation_Left { get; set; }  
        ///   
        /// 运行完毕离右边边的距离  
        ///   
        public double Translation_Right { get; set; }  
        ///   
        /// 初始化  
        ///   
        public ImageBarrage()  
            : base()  
        {  
            LoadingTime = DateTime.Now;  
            TranslateTransformClass = new TranslateTransform();  
            this.RenderTransform = TranslateTransformClass;  
            this.Loaded += new RoutedEventHandler(ImageBarrage_Loaded);  
        }  
        ///   
        /// 加载触发时间  
        ///   
        ///   
        ///   
        void ImageBarrage_Loaded(object sender, RoutedEventArgs e)  
        {  
            if (TranslateTransformClass == null)  
                return;  
  
            //执行时间  
            Duration duration = new Duration(TimeSpan.FromSeconds(FromSeconds));  
            DoubleAnimation da = new DoubleAnimation(Translation_Left, Translation_Right, duration);  
            da.AutoReverse = false;  
            da.FillBehavior = FillBehavior.HoldEnd;  
            TranslateTransformClass.BeginAnimation(TranslateTransform.XProperty, da);  
            this.Loaded -= new RoutedEventHandler(ImageBarrage_Loaded);  
  
        }  
  
    }  
  
    ///   
    /// 可编辑弹幕控件(高级功能)  
    ///   
    public class SeniorBarrageGrid : Grid  
    {  
        TranslateTransform TranslateTransformClass;  
        ///   
        /// 获取或设置控件动画执行时长 秒  
        ///   
        public double FromSeconds { get; set; }  
        ///   
        /// 加载时间  
        ///   
        public DateTime LoadingTime { get; set; }  
        ///   
        /// 运行完毕离左边的距离  
        ///   
        public double Translation_Left { get; set; }  
        ///   
        /// 运行完毕离右边边的距离  
        ///   
        public double Translation_Right { get; set; }  
  
        public bool Enabled { get; set; }  
        ///   
        /// 初始化  
        ///   
        public SeniorBarrageGrid()  
            : base()  
        {  
  
            LoadingTime = DateTime.Now;  
            TranslateTransformClass = new TranslateTransform();  
            this.RenderTransform = TranslateTransformClass;  
            this.Loaded += new RoutedEventHandler(SeniorBarrageGrid_Loaded);  
        }  
  
  
  
        ///   
        /// 加载触发时间  
        ///   
        ///   
        ///   
        void SeniorBarrageGrid_Loaded(object sender, RoutedEventArgs e)  
        {  
            if (TranslateTransformClass == null)  
                return;  
            if (!Enabled)  
            {  
                return;  
            }  
            else  
            {  
                Enabled = false;  
            }  
  
            Translation_Right = Translation_Right > 0 ? Translation_Right * -1 : Translation_Right;  
            //执行时间  
            Duration duration = new Duration(TimeSpan.FromSeconds(FromSeconds));  
            DoubleAnimation da = new DoubleAnimation(Translation_Left, Translation_Right, duration);  
            da.AutoReverse = false;  
            da.FillBehavior = FillBehavior.HoldEnd;  
  
            TranslateTransformClass.BeginAnimation(TranslateTransform.XProperty, da);  
            this.Loaded -= new RoutedEventHandler(SeniorBarrageGrid_Loaded);  
        }  
    }  
}

模仿的客户端界面如下 基于 WPF .net 4.5 删除了联网模块 直接可以运行 有兴趣的可以下载看看

下载源码 解压密码 www.yuantk.com

 在windows环境下安装redis过程 - 其实挺简单
.NET5 webApi项目接收HttpPost文本流数据
C# 要如何才能实现代码修改系统桌面显示的分辨率
WPF Frame实现功能类似web浏览器的历史记录倒退前进效果
C# .NET中 使用GDI+ 添加图形水印
bootstrap 控制标签元素d-none/d-block在不同尺寸的设备中的作用
WPF+MVVM简单实际应用实例:打造一个任务管理器
关于WPF中Frame使用新Page切换内存上涨问题
WPF ListBox光标定位最后一行数据
c#通过winAPI函数InternetGetConnectedState获得本地系统的网络连接状态
PDF文件流接口弹出下载提示不是直接预览的解决办法
WPF前端XAML页面实现灰白相间马赛克背景效果
暂无相关内容...
WPF实现读取USB摄像头实时视频展示以及导出实时截图的C#源码例子
基于WPF实现系统桌面录制gif+批量添加水印工具源码
C#+WPF实现模仿实现的网易云音乐客户端源码
WPF实现的自定义工作大日历排班Calendar控件模板的例子源码
visual studio 2019在线安装包和激活码密钥key
基于Wpf+MVVM实现的完整截图软件的框选区域效果源码
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删