实例介绍
【实例简介】支持的视频文件有(*.avi,*.mp4,*.wmv)
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using MultiMediaStudio.UserInfoClass; using System.Windows.Media.Animation; using System.Windows.Threading; using System.Threading; using Microsoft.Win32; namespace MultiMediaStudio.UserContorl.Interface { /// <summary> /// UserPlayerSence.xaml 的交互逻辑 /// </summary> public partial class UserPlayerSence : UserControl { public UserPlayerSence() { InitializeComponent(); mTimer = new DispatcherTimer(); mTimer.Interval = TimeSpan.FromMilliseconds(100); mTimer.Tick = new EventHandler(mTimer_Tick); } PlayerVideoInfo mPlayerVideoInfo; public event Action BackMainSence; private int mIndex =0; double soundNow = 1; double mVideoLong = 0; private bool mVideoEnd = false; private bool mBoolOpen = false; enum stateVideo { none, play, pause } private bool mBoolMove = false; stateVideo mstateVideo = stateVideo.none; private DispatcherTimer mTimer; private void UserControl_Loaded(object sender, RoutedEventArgs e) { GlobalManager.LayoutElement(0, 0, 1366, 768, MainCanvas); GlobalManager.LayoutElement(0, -30, 1366, 743, borderMedia); GlobalManager.LayoutElement(2, 2, 1362, 739, MainMedia); GlobalManager.LayoutElement(0, 683, 1366, 85, ButtomCanvas); GlobalManager.LayoutElement(0, 0, 1366, 85, BottomBG); GlobalManager.LayoutElement(23, 10, 72, 72, PlayBg); GlobalManager.LayoutElement(23, 10, 72, 72, PauseBg); PauseBg.Visibility = Visibility.Collapsed; GlobalManager.LayoutElement(165, 39, 648, 16, PostionBG); GlobalManager.LayoutElement(165, 39, 648, 16, PostionFont); PostionFont.Width = 0; GlobalManager.LayoutElement(155, 37, 20, 23, PostionNow); GlobalManager.LayoutElement(908, 33, 30, 30, SoundImageBG); GlobalManager.LayoutElement(957, 41, 193, 13, SoundBG); GlobalManager.LayoutElement(957, 41, 193, 13, SoundFont); SoundFont.Width = 0; GlobalManager.LayoutElement(951.5, 40, 13, 19, SoundNow); GlobalManager.LayoutElement(1256, 20, 89, 45, BackImageBG); GlobalManager.LayoutElement(633, 291, 100, 100, RunImage); GlobalManager.LayoutElement(635, 339, 110, 65, TJ); RunImage.Visibility = Visibility.Collapsed; Canvas.SetZIndex(RunImage, 50); InitVolume(); RunImage.RenderTransformOrigin = new Point(0.5, 0.5); MainMedia.MediaOpened =new RoutedEventHandler(MainMedia_MediaOpened); } int mAngel = 0; void mTimer_Tick(object sender, EventArgs e) { if (mAngel >= 360) mAngel = 0; mAngel = mAngel 30; RunImage.RenderTransform = new RotateTransform(mAngel); } #region 初始化 public void InitSence(PlayerVideoInfo playerVideoInfo) { mPlayerVideoInfo = playerVideoInfo; BottomBG.Source = playerVideoInfo.PlayButtonList[0]; PlayBg.Source = playerVideoInfo.PlayButtonList[1]; PauseBg.Source = playerVideoInfo.PlayButtonList[2]; PostionBG.Source = playerVideoInfo.PlayButtonList[3]; PostionFont.Source = playerVideoInfo.PlayButtonList[4]; PostionNow.Source = playerVideoInfo.PlayButtonList[5]; SoundImageBG.Source = playerVideoInfo.PlayButtonList[6]; SoundBG.Source = playerVideoInfo.PlayButtonList[7]; SoundFont.Source = playerVideoInfo.PlayButtonList[8]; SoundNow.Source = playerVideoInfo.PlayButtonList[9]; BackImageBG.Source = playerVideoInfo.PlayButtonList[10]; RunImage.Source = playerVideoInfo.PlayButtonList[11]; TJ.Source = playerVideoInfo.PlayButtonList[12]; } #endregion public void SetPlay(int index) { RunImage.Visibility = Visibility.Visible; mAngel = 0; mTimer.Start(); mIndex = index - 1; MainMedia.Source = mPlayerVideoInfo.UriVideo[index -1]; MainMedia.Play(); mstateVideo = stateVideo.play; } public void SetPlay(string index) { //PauseBg.Visibility = Visibility.Visible; TJ.Visibility = Visibility.Collapsed; RunImage.Visibility = Visibility.Visible; mAngel = 0; mTimer.Start(); MainMedia.Source = new Uri(index); MainMedia.Play(); mstateVideo = stateVideo.play; } private void InitVolume() { soundNow = 1; Canvas.SetLeft(SoundNow, GlobalManager.TransValueFromWidth(951.5) soundNow * GlobalManager.TransValueFromWidth(193)); SoundFont.Width = soundNow * GlobalManager.TransValueFromWidth(193); MainMedia.Volume = soundNow; } private void BackImageBG_MouseDown(object sender, MouseButtonEventArgs e) { if (BackMainSence != null) { MainMedia.Stop(); MainMedia.Source = null; InitVolume(); mStory.Stop(); PostionFont.Width = 0; mBoolOpen = false; Canvas.SetLeft(PostionNow, GlobalManager.TransValueFromWidth(155)); mVideoEnd = false; PlayBg.Visibility = Visibility.Collapsed; PauseBg.Visibility = Visibility.Visible; ButtonState.mState = ButtonState.States.None; mTimer.Stop(); RunImage.Visibility = Visibility.Collapsed; BackMainSence(); } } private void PlayBg_MouseDown(object sender, MouseButtonEventArgs e) { if (mVideoEnd) { MainMedia.Source = mPlayerVideoInfo.UriVideo[mIndex]; mVideoEnd = false; } else { mStory.Resume(); } MainMedia.Play(); if (mBoolMove) { Move(PostionFont, PostionNow); } mstateVideo = stateVideo.play; PauseBg.Visibility = Visibility.Visible; PlayBg.Visibility = Visibility.Collapsed; } private void PauseBg_MouseDown(object sender, MouseButtonEventArgs e) { mStory.Pause(); MainMedia.Pause(); mstateVideo = stateVideo.pause; PauseBg.Visibility = Visibility.Collapsed; PlayBg.Visibility = Visibility.Visible; } private void MainMedia_MediaEnded(object sender, RoutedEventArgs e) { PauseBg.Visibility = Visibility.Collapsed; PlayBg.Visibility = Visibility.Visible; MainMedia.Stop(); MainMedia.Source = null; mStory.Stop(); mBoolOpen = false; PostionFont.Width = 0; Canvas.SetLeft(PostionNow, GlobalManager.TransValueFromWidth(155)); mVideoEnd = true; //MainMedia.Source = mPlayerVideoInfo.UriVideo[mIndex]; } private void SoundBG_MouseDown(object sender, MouseButtonEventArgs e) { if (ButtonState.mState == ButtonState.States.None && mBoolOpen) { ButtonState.mState = ButtonState.States.Down; Canvas.SetLeft(SoundNow,e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(6.5)); SoundFont.Width = e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(957); soundNow = (e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(957)) / GlobalManager.TransValueFromWidth(193); MainMedia.Volume = soundNow; } } private void SoundBG_MouseMove(object sender, MouseEventArgs e) { if (ButtonState.mState == ButtonState.States.Down) { Canvas.SetLeft(SoundNow, e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(6.5)); SoundFont.Width = e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(957); soundNow = (e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(957)) / GlobalManager.TransValueFromWidth(193); MainMedia.Volume = soundNow; } } private void SoundBG_MouseUp(object sender, MouseButtonEventArgs e) { if (ButtonState.mState == ButtonState.States.Down) { ButtonState.mState = ButtonState.States.Up; ButtonState.mState = ButtonState.States.None; } } private void SoundBG_MouseLeave(object sender, MouseEventArgs e) { if (ButtonState.mState == ButtonState.States.Down) { ButtonState.mState = ButtonState.States.Leave; ButtonState.mState = ButtonState.States.None; } } private void MainMedia_MediaOpened(object sender, RoutedEventArgs e) { mTimer.Stop(); PauseBg.Visibility = Visibility.Visible; PlayBg.Visibility = Visibility.Collapsed; RunImage.Visibility = Visibility.Collapsed; mVideoLong = MainMedia.NaturalDuration.TimeSpan.TotalMilliseconds; mTime = mVideoLong; mBoolOpen = true; Move(PostionFont,PostionNow); Console.WriteLine(mVideoLong/PostionBG.Width); } Storyboard mStory; double mTime = 1; bool mDoubleAnimtion = true; private void Move(FrameworkElement elem, FrameworkElement elem2) { if (mTime > 0) { mStory = new Storyboard(); DoubleAnimation width = new DoubleAnimation(PostionBG.Width, new Duration(TimeSpan.FromMilliseconds(mTime)), FillBehavior.Stop); Storyboard.SetTarget(width, elem); Storyboard.SetTargetProperty(width, new PropertyPath(FrameworkElement.WidthProperty)); DoubleAnimation left = new DoubleAnimation(PostionBG.Width GlobalManager.TransValueFromWidth(155), new Duration(TimeSpan.FromMilliseconds(mTime)), FillBehavior.Stop); Storyboard.SetTarget(left, elem2); Storyboard.SetTargetProperty(left, new PropertyPath(Canvas.LeftProperty)); mStory.FillBehavior = FillBehavior.Stop; mStory.Children.Add(width); mStory.Children.Add(left); mStory.Completed = delegate { elem.Width = PostionBG.Width; Canvas.SetLeft(elem2, PostionBG.Width GlobalManager.TransValueFromWidth(155)); mBoolMove = false; }; mStory.Begin(); } } private void InstantMove(FrameworkElement elem, FrameworkElement elem2,double to, double time) { mDoubleAnimtion = false; mStory = new Storyboard(); DoubleAnimation width = new DoubleAnimation(to, new Duration(TimeSpan.FromMilliseconds(time)), FillBehavior.Stop); Storyboard.SetTarget(width, elem); Storyboard.SetTargetProperty(width, new PropertyPath(FrameworkElement.WidthProperty)); DoubleAnimation left = new DoubleAnimation(to GlobalManager.TransValueFromWidth(155), new Duration(TimeSpan.FromMilliseconds(time)), FillBehavior.Stop); Storyboard.SetTarget(left, elem2); Storyboard.SetTargetProperty(left, new PropertyPath(Canvas.LeftProperty)); mStory.FillBehavior = FillBehavior.Stop; mStory.Children.Add(width); mStory.Children.Add(left); mStory.Completed = delegate { elem.Width = to; mDoubleAnimtion = true; Canvas.SetLeft(elem2, to GlobalManager.TransValueFromWidth(155)); if (mstateVideo == stateVideo.play) { Move(PostionFont, PostionNow); } else { mBoolMove = true; } }; mStory.Begin(); } private void PostionBG_MouseDown(object sender, MouseButtonEventArgs e) { if (ButtonState.mState == ButtonState.States.None && mBoolOpen) { ButtonState.mState = ButtonState.States.Down; mStory.Stop(); double movewidth = e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165); MainMedia.Position = TimeSpan.FromMilliseconds(mVideoLong * movewidth / PostionBG.Width); mTime = mVideoLong - mVideoLong * (e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165)) / PostionBG.Width ; InstantMove(PostionFont, PostionNow, movewidth, 100); } } private void PostionBG_MouseLeave(object sender, MouseEventArgs e) { if (ButtonState.mState == ButtonState.States.Move && mDoubleAnimtion) { ButtonState.mState = ButtonState.States.Leave; mStory.Stop(); double movewidth = e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165); MainMedia.Position = TimeSpan.FromMilliseconds(mVideoLong * movewidth / PostionBG.Width); mTime = mVideoLong - mVideoLong * (e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165)) / PostionBG.Width; if (mstateVideo == stateVideo.play) { MainMedia.Play(); //InstantMove(PostionFont, PostionNow, movewidth, 100); //Thread.Sleep(100); Move(PostionFont, PostionNow); } else { mBoolMove = true; } ButtonState.mState = ButtonState.States.None; } else if (ButtonState.mState == ButtonState.States.Down) { ButtonState.mState = ButtonState.States.Leave; ButtonState.mState = ButtonState.States.None; } } private void PostionBG_MouseMove(object sender, MouseEventArgs e) { if (ButtonState.mState == ButtonState.States.Down || ButtonState.mState == ButtonState.States.Move) { if (mDoubleAnimtion) { MainMedia.Pause(); mStory.Stop(); double movewidth = e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165); //MainMedia.Position = TimeSpan.FromMilliseconds(mVideoLong * movewidth / PostionBG.Width); Canvas.SetLeft(PostionNow, movewidth GlobalManager.TransValueFromWidth(155)); PostionFont.Width = movewidth; ButtonState.mState = ButtonState.States.Move; } //InstantMove(PostionFont, PostionNow, movewidth, 200); } } private void PostionBG_MouseUp(object sender, MouseButtonEventArgs e) { if (ButtonState.mState == ButtonState.States.Move && mDoubleAnimtion) { ButtonState.mState = ButtonState.States.Up; mStory.Stop(); double movewidth = e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165) Convert.ToDouble(100) / mVideoLong * PostionBG.Width; MainMedia.Position = TimeSpan.FromMilliseconds(mVideoLong * movewidth / PostionBG.Width); mTime = mVideoLong - mVideoLong * (e.GetPosition(ButtomCanvas).X - GlobalManager.TransValueFromWidth(165)) / PostionBG.Width - 100; if (mstateVideo == stateVideo.play) { MainMedia.Play(); Move(PostionFont, PostionNow); } else { mBoolMove = true; } ButtonState.mState = ButtonState.States.None; } else if (ButtonState.mState == ButtonState.States.Down) { ButtonState.mState = ButtonState.States.Up; ButtonState.mState = ButtonState.States.None; } } private void TJ_MouseDown(object sender, MouseButtonEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "视频文件(*.avi,*.mp4,*.wmv)|*.avi;*.mp4;*.wmv"; ofd.Title = "打开视频"; ofd.AddExtension = true; ofd.ValidateNames = true; ofd.CheckPathExists = true; ofd.CheckFileExists = true; if (ofd.ShowDialog().ToString() == "True") { SetPlay(ofd.FileName); //Console.WriteLine(ofd.FileName); } else { Console.WriteLine(ofd.ShowDialog().ToString()); } } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论