欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Winows Phone 7 不溫不火學習之《音樂播放示例》

系統 1941 0

微軟的Microsoft.Xna.Framework.Media組件中自帶有MediaPlayer 的庫,其中庫里面存放有三首曲子,我們可以通過引用該組件來調用庫中相應的函數進行歌曲播放,通過引用Microsoft.Xna.Framework.dll ,引用該命名空間即可使用該 組件。  

  這個DEMO是一個音樂播放的小例子,界面如下:

Winows Phone 7 不溫不火學習之《音樂播放示例》

如上圖,有四個控件,一個圖片控件,一個文本控件,兩個控制按鈕。當頁面被導航進來時,得到一個Song 類型的歌曲,并為文本控件賦值歌曲名稱。得到類型后,在頁面初始完成時,得到一張歌曲的封面并為圖片控件賦值。下面是整個應的代碼:

代碼
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Media;
using System.Windows.Threading;
using System.IO;
using System.Windows.Resources;
using System.Windows.Media.Imaging;


namespace PostCodeManager
{
public partial class MainPage:PhoneApplicationPage
{
#region 成員聲明
Song_playSong;
// 聲明一個Song類型的變量
bool _historyItemLaunch;
const String_playSongKey = " playSong " ;
#endregion


// Constructor
public MainPage()
{
InitializeComponent();
_playSong
= null ;
_historyItemLaunch
= false ;

// 聲明一個Timer使用線程運行XNAinternals來自于微軟XNA框架
DispatcherTimerdt = new DispatcherTimer();
dt.Interval
= TimeSpan.FromMilliseconds( 33 );
// 使用委托調用逐幀調用FrameworkDispatcher.Update();
dt.Tick += delegate
{
try
{
// 這個函數作用是更新各種XNA組件狀態,并觸發相應的事件,這個是必須的,否則會報異常
FrameworkDispatcher.Update();

}
catch
{

throw ;
}
};
dt.Start();

MediaPlayer.MediaStateChanged
+= new EventHandler < EventArgs > (MediaPlayer_MediaStateChanged);

}

/// <summary>
/// 當頁面進入時調用
/// </summary>
/// <paramname="e"></param>
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgse)
{
MediaLibrarylibrary
= new MediaLibrary();
if (NavigationContext.QueryString.ContainsKey(_playSongKey))
{
StringsongToPlay
= NavigationContext.QueryString[_playSongKey];
foreach (Songsong in library.Songs)
{
if ( 0 == String.Compare(songToPlay,song.Name))
{
_playSong
= song;
}
}
_historyItemLaunch
= true ;
}
else if (MediaPlayer.State == MediaState.Playing)
{
_playSong
= MediaPlayer.Queue.ActiveSong;
}
else
{
Randomrd
= new Random();
if (library.Songs.Count > 0 )
{
_playSong
= library.Songs[rd.Next(library.Songs.Count)];
}
else
{
SongName.Text
= " nosongsinlibrary " ;
btn_play_music.IsEnabled
= false ;
}
}


base .OnNavigatedTo(e);
}

void MediaPlayer_MediaStateChanged( object sender,EventArgse)
{
switch (MediaPlayer.State)
{

case MediaState.Playing:
btn_play_music.IsEnabled
= false ;
btn_stop.IsEnabled
= true ;
break ;
case MediaState.Paused:
case MediaState.Stopped:
btn_play_music.IsEnabled
= true ;
btn_stop.IsEnabled
= false ;
break ;
}
}

/// <summary>
/// 為主窗體添加UI加載完成后的事件
/// </summary>
/// <paramname="sender"></param>
/// <paramname="e"></param>
private void PhoneApplicationPage_Loaded( object sender,RoutedEventArgse)
{
PopulateSongMetaData();
setInitialButtonState();
if (_historyItemLaunch)
{
playSong();
}
}


/// <summary>
/// 開始播放音樂
/// </summary>
/// <paramname="sender"></param>
/// <paramname="e"></param>
private void btn_play_music_Click( object sender,RoutedEventArgse)
{
playSong();
}

/// <summary>
/// 停止播放音樂
/// </summary>
/// <paramname="sender"></param>
/// <paramname="e"></param>
private void btn_stop_Click( object sender,RoutedEventArgse)
{
stopSong();
}

/// <summary>
/// 播放
/// </summary>
private void playSong()
{
if (_playSong != null )
{
MediaPlayer.Play(_playSong);
}
}
/// <summary>
/// 停止
/// </summary>
private void stopSong()
{
if (MediaState.Playing == MediaPlayer.State)
{
MediaPlayer.Stop();
}
}

/// <summary>
/// 使用圖片讀取圖片封面
/// </summary>
private void PopulateSongMetaData()
{
if (_playSong != null )
{
SongName.Text
= _playSong.Name;
StreamalbumArtStream
= _playSong.Album.GetAlbumArt();
if (albumArtStream == null )
{
StreamResourceInfoalbumArtPlaceholder
= Application.GetResourceStream( new Uri( " ApplicationIcon.png " ,UriKind.Relative));
albumArtStream
= albumArtPlaceholder.Stream;
}
BitmapImagealbumArtImage
= new BitmapImage();
albumArtImage.SetSource(albumArtStream);
cover.Source
= albumArtImage;
}
}

/// <summary>
/// 初始化按鈕
/// </summary>
private void setInitialButtonState()
{
switch (MediaPlayer.State)
{

case MediaState.Playing:
btn_play_music.IsEnabled
= false ;
btn_stop.IsEnabled
= true ;
break ;
case MediaState.Paused:
case MediaState.Stopped:
btn_play_music.IsEnabled
= true ;
btn_stop.IsEnabled
= false ;
break ;
}
}



}
}

TIP:OnNavigatedTo方法是一個重寫系統事件的方法,此方法以檢查導航請求并且準備供顯示的頁面,為一些必要的組件和處理邏輯提供處理任務,上一篇提到過工程里面包含有一張圖片為SplashScreenImage.jpg,這張圖片就是就是為處理方法提供的臨時頁面。這個做法好處在于,用戶會認為程序啟動時和啟動后都是一致的,當我們真正程序啟動完成 后,要做一些頁面其他的加載,就可以在pageLoad 里面處理。下面為了證實我所說的,來調試一下吧,首先我們在OnNavigatedTo 的入口處加一個斷點,按F5進入調試模式,我們來看看程序是怎么跑的。如圖:

Winows Phone 7 不溫不火學習之《音樂播放示例》

如圖,重寫這個方法是不是很不錯,在Android 我記得是沒有這個事件可以重寫的,如果有的話,請麻煩告知一聲。謝謝。

那么你還在想什么?趕快動手吧,播放一下聽聽。

源碼下載 : 猛擊點我

Winows Phone 7 不溫不火學習之《音樂播放示例》


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品一区二区三区精华液 | 多男操一女视频 | 国产在线观看www鲁啊鲁免费 | 午夜剧场在线免费观看 | 一级毛片不卡片免费观看 | 91在线播放视频 | 午夜激情视频免费 | 日韩在线观看你懂的 | 一区二区三区四区国产 | 亚洲免费视频网站 | 九九视频在线观看 | 亚洲精品国产成人 | 91视频在线网站 | 麻豆影视在线 | 国产精品欧美亚洲日本综合 | 久操免费在线视频 | 伊人国产精品 | 免费一级欧美片片线观看 | 一级特黄特黄xxx视频 | 日韩精品久久久久久久电影 | 羞羞的视频在线免费观看 | 中文成人在线 | 久久中文字幕一区二区三区 | 在线看亚洲 | 国产人成激情视频在线观看 | 99精品视频在线在线视频观看 | 亚洲国产精品一区二区第一页 | 欧美亚洲一区二区三区四区 | 二区三区不卡不卡视频 | av在线电影网 | 国产精品成人va在线观看入口 | 激情丁香六月 | 在线观看特色大片免费网站 | 日韩18视频在线观看 | 久久日本精品国产精品白 | 国产在线精品一区二区夜色 | 手机在线一区二区三区 | 999精品免费视频 | 2019偷偷狠狠的日日 | 午夜视频在线观看免费观看在线观看 | 精品国产一区二区在线 |