WPF 实现抽奖功能的全屏弹幕滚动效果
WPF弹幕效果全屏弹幕
编程开发
266
WPF 程序里怎么实现全屏弹幕滚动效果
某次公司开年会上,为了活跃气氛,使用了一个全屏互动弹幕的软件,挺有意思的。基于微信公众号,微信用户只需要向关注的公众号发送文字、图像或者小视频,大屏幕上面就会以弹幕的方式滚动展现出来,出于爱好闲暇时间自己也就研究了下;
服务端开发:
也不复杂 ,需要一个网站交互服务器(用来接收微信的交互信息、以及新消息推送接口),以及一个微信公众号(可以使用测试号 权限比较高)然后再微信公众平台上面把开发者信息配置好即可(具体配置可以去看微信的开发文档)
客户端开发:
需要 采用轮询或者使用长连接等方式 来定时或实时接收新消息推送 用来展现到界面上
麻烦一点的就是wpf 实现弹幕效果,毕竟不像web端那样有很多弹幕jquery插件 基本都需要自己去实现
以下是自己写的一个弹幕控件类
///自定义控件
namespace BarrageControlLibrary
{
/// <summary>
/// 纯文字弹幕控件
/// </summary>
public class TextBlockBarrage : TextBlock
{
TranslateTransform TranslateTransformClass;
/// <summary>
/// 获取或设置控件动画执行时长 秒
/// </summary>
public double FromSeconds { get; set; }
/// <summary>
/// 加载时间
/// </summary>
public DateTime LoadingTime { get; set; }
/// <summary>
/// 运行完毕离左边的距离
/// </summary>
public double Translation_Left { get; set; }
/// <summary>
/// 运行完毕离右边边的距离
/// </summary>
public double Translation_Right { get; set; }
public bool Enabled { get; set; }
/// <summary>
/// 初始化
/// </summary>
public TextBlockBarrage()
: base()
{
LoadingTime = DateTime.Now;
TranslateTransformClass = new TranslateTransform();
this.RenderTransform = TranslateTransformClass;
this.Loaded += new RoutedEventHandler(TextBlockBarrage_Loaded);
}
/// <summary>
/// 加载触发时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 纯图片弹幕控件
/// </summary>
public class ImageBarrage : Image
{
TranslateTransform TranslateTransformClass;
/// <summary>
/// 获取或设置控件动画执行时长 秒
/// </summary>
public double FromSeconds { get; set; }
/// <summary>
/// 加载时间
/// </summary>
public DateTime LoadingTime { get; set; }
/// <summary>
/// 运行完毕离左边的距离
/// </summary>
public double Translation_Left { get; set; }
/// <summary>
/// 运行完毕离右边边的距离
/// </summary>
public double Translation_Right { get; set; }
/// <summary>
/// 初始化
/// </summary>
public ImageBarrage()
: base()
{
LoadingTime = DateTime.Now;
TranslateTransformClass = new TranslateTransform();
this.RenderTransform = TranslateTransformClass;
this.Loaded += new RoutedEventHandler(ImageBarrage_Loaded);
}
/// <summary>
/// 加载触发时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 可编辑弹幕控件(高级功能)
/// </summary>
public class SeniorBarrageGrid : Grid
{
TranslateTransform TranslateTransformClass;
/// <summary>
/// 获取或设置控件动画执行时长 秒
/// </summary>
public double FromSeconds { get; set; }
/// <summary>
/// 加载时间
/// </summary>
public DateTime LoadingTime { get; set; }
/// <summary>
/// 运行完毕离左边的距离
/// </summary>
public double Translation_Left { get; set; }
/// <summary>
/// 运行完毕离右边边的距离
/// </summary>
public double Translation_Right { get; set; }
public bool Enabled { get; set; }
/// <summary>
/// 初始化
/// </summary>
public SeniorBarrageGrid()
: base()
{
LoadingTime = DateTime.Now;
TranslateTransformClass = new TranslateTransform();
this.RenderTransform = TranslateTransformClass;
this.Loaded += new RoutedEventHandler(SeniorBarrageGrid_Loaded);
}
/// <summary>
/// 加载触发时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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 删除了联网模块 直接可以运行 有兴趣的可以下载看看
1. 文明上网,理性表达,营造舒适的学习氛围
2. 请不要反馈提交与本页主题无关内容