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 删除了联网模块 直接可以运行 有兴趣的可以下载看看