freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android平臺(tái)的在線音樂(lè)客戶端設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文-閱讀頁(yè)

2024-09-17 19:56本頁(yè)面
  

【正文】 droid:textColor=8deeee android:id=+id/lrcText android:layout_width=wrap_content/TextView /LinearLayout 屬性: orientation=horizontal:此線性布局的子部件為水平方式布局 Layout_width=fill_content :布局的寬度為填滿父布局 Layout_height=wrap_content :布局的高度子由窗體的大小決定 窗體 TextView 文本 : textColor=8deeee 設(shè)置文本顯示的顏色 RGB為 8deeee TextSize為默認(rèn)大小 20 播放界面音軌的實(shí)現(xiàn) 播放器音軌 SeekBar(如下圖) Android系統(tǒng)自帶 SeekBar(如下圖) 圖 不管是從界面外觀還是從功能上,系統(tǒng)自帶的 SeekBar往往不能滿足用戶的需要。引用了 drawable中的 件 ,,算法如下: ?xml version= encoding=utf8? layerlist xmlns:android= item android:id=android:id/background shapecorners android:radius=5dip /gradient android:startColor=ff9d9e9d android:centerColor=ff5a5d5a android:centerY= android:endColor=ff747674 21 android:angle=270 //shape/item item android:id=android:id/secondaryProgress clipshapecorners android:radius=5dip / gradient android:startColor=80ffd300 android:centerColor=80ffb600 android:centerY= android:endColor=a0ffcb00 android:angle=270 / /shape/clip/item item android:id=android:id/progress clipshapecorners android:radius=5dip /gradient android:startColor=ff0099CCandroid:centerColor=ff3399CC android:centerY=android:endColor=ff6699CC android:angle=270 //shape/clip/item /layerlist 配置文件中三個(gè) Item項(xiàng)依次決定了 SeekBar的三層背景,從最下層的灰色到最上層的藍(lán)色。通過(guò)這些屬性設(shè)置,就自定義一個(gè)如上圖一的 SeekBar音軌 . 播放器最重要的一部分就是音軌與歌曲進(jìn)度同步的實(shí)現(xiàn)。 (1)設(shè)置游標(biāo)的起始進(jìn)度為 1。 (currently_Progress)。 showLrcTwo(lrc_time, lrc_word)。}}。這樣就達(dá)到了各線程之間的通信。 以上代碼意思是讓播放歌曲的線程每隔 1000ms,即每 1秒對(duì)音軌的TextView重新設(shè)置時(shí)間且讓進(jìn)度條前進(jìn) 1秒的進(jìn)度。這樣就實(shí)現(xiàn)了歌詞同步功能 SeekBar有一個(gè)監(jiān)聽器,該監(jiān)聽器的作用是一直保持著對(duì)進(jìn)度條的監(jiān)聽,當(dāng)我們用鼠標(biāo)向 SeekBar的各位置進(jìn)行點(diǎn)擊時(shí),它會(huì)自動(dòng)監(jiān)聽其位置 ,進(jìn)行相應(yīng)的位置顯示。 播放器播放、暫停、停止等功能 圖 如圖 :各按鈕水平放置,用的是布局中的線性布局LinearLayout,用方法 setOrientation(horizontal)。LinearLayout中依次放置播放,暫停,停止,上、下一曲按鈕屬性。該接口在執(zhí)行行需要一個(gè)數(shù)據(jù)源,通過(guò)如下四個(gè)步驟: 第一步: ()。 第二步:傳入歌曲數(shù)據(jù)源,這里也是一個(gè)數(shù)據(jù)流 (String path)。 第三步 :準(zhǔn)備播放數(shù)據(jù)源,調(diào)用方法 ()。播放數(shù)據(jù)源,該數(shù)據(jù)源播放后,不再與程序 有關(guān),需要用 ()方法讓其停止或()。 歌曲數(shù)據(jù)源的獲得:要 獲得數(shù)據(jù)源,需要我們提供給接口類一個(gè)歌曲存 23 放路徑,而這個(gè)路徑已經(jīng)被事先放到數(shù)據(jù)庫(kù)里了,我們只需要進(jìn)行數(shù)據(jù)庫(kù)進(jìn)行操作。這里將調(diào)用 PlayRackActivity的一個(gè)方法query()。 Uri uri = 。 String selection = fileName=?。 Cursor c=(uri,projection,selection, selectionArgs, null)。 return path。 } 方法 getContentResolver是包 里面的方法,它會(huì)自動(dòng)的調(diào)用 ContentProvider 中的關(guān)聯(lián)數(shù)據(jù)庫(kù),我們 需用這個(gè)方法就可以操作數(shù)據(jù)庫(kù)。 Uri 類似一個(gè)網(wǎng)絡(luò)連接的 Url。在查詢數(shù)據(jù)庫(kù)時(shí)需要傳入一個(gè)當(dāng)前播放的歌曲名字,通過(guò)歌曲名字來(lái)查詢歌曲的路徑。系統(tǒng)默認(rèn)的方式每一行只顯示一個(gè) TextView,本播放列表實(shí)現(xiàn)了自定義的方式,剛 ListView的每一行顯示一個(gè)音樂(lè)圖片和 一個(gè)歌曲名字。由于 BaseAdapter是一個(gè)抽象類,我們需要實(shí)現(xiàn)里面的抽象方法 getView()。視圖可以顯示在 Activity上,所以就可以看到我們想要的歌曲列表界面。這樣就可以通過(guò) Intent將數(shù)據(jù)傳入到其它的Activity。 歌曲列表 是從播放主界面跳轉(zhuǎn)過(guò)來(lái)的,能跳到該歌曲列表是前提是數(shù)據(jù)有歌曲列表的存在。如果不存在剛會(huì)提示是空列表,選擇到 SDCard中添加歌曲 (如圖 ) 25 圖 中間為一個(gè) Dialog對(duì)話框,具有 Acitivty的屬性,但是獨(dú)立于界面的一個(gè)視圖,該對(duì)話框中放置了一個(gè)布局文件。()。 菜單功能 菜單界面(如圖 ) 圖 26 菜單界面 在 ,布局結(jié)構(gòu)如下: ?xml version= encoding=utf8? LinearLayout LinearLayout TextView /TextView /LinearLayout ListView /ListView TextView /TextView LinearLayout ImageButton /ImageButton /LinearLayout /LinearLayout 在程序中的 ListString容器,該容器可以存放 String類型的字符,如下: ListString seclect_items = new ArrayListString()。 (詳細(xì) )。 (移除 )。 (設(shè)置 )。方法將這些參數(shù)設(shè)置到界面中去,可以看到與界面顯示效果相同! 該菜單每一行有一張圖片和一個(gè)菜單選項(xiàng)(如圖 ) 圖 ListAdapter繼承一個(gè) BaseAdapter,實(shí)現(xiàn)里面的 getView()方法,再對(duì)其進(jìn)行擴(kuò)展。 = (TextView) ()。 27 (holder)。這種算法的實(shí)現(xiàn)在前面已經(jīng)討論過(guò),這里不再討論。各功能都是通過(guò)鼠標(biāo)點(diǎn)擊或觸屏觸發(fā)事件。 詳細(xì)功能:點(diǎn)擊后事件觸發(fā),傳入歌曲名字,跳轉(zhuǎn)到下一界面,顯示該歌曲的詳細(xì)信息。 移除功能:點(diǎn)擊后事件觸發(fā)。 全部移除:點(diǎn)擊后事件觸發(fā),刪除播放列表。 選擇移除菜單選項(xiàng)時(shí),出現(xiàn)(圖 )的 Dialog、選擇全部移除菜單選項(xiàng)時(shí),出現(xiàn)(圖 )的 Dialog 圖 圖 刪除單首歌曲算法:是對(duì)數(shù)據(jù)庫(kù)進(jìn)行單項(xiàng)操作。 Uri uri = 。 String[] selectionArgs = { musicName }。 } 選擇“是”后,執(zhí)行代碼: Intent intent = new Intent(,)。聲明一個(gè) Intent,并指明要跳轉(zhuǎn)的界面類,然后啟動(dòng) Intent。 RatioGroup 里面嵌套著 3個(gè) RatioButton,即界面上顯示的(單曲循環(huán)、隨機(jī)播放、順序播放)。 MediaPlayer有一個(gè)監(jiān)聽器,它監(jiān)聽著歌曲是否正在播放或者是否播放完成,當(dāng)歌曲播放完成時(shí),會(huì)觸發(fā)方法 OnCompletionListener(),在該方法里面可以處理歌曲播放完成后的操作。 (2)歌詞設(shè)置 歌詞是否顯示是一個(gè)開關(guān)按鈕 ToggleButton實(shí)現(xiàn)的,有 ON和 OFF狀態(tài),當(dāng)為 ON時(shí),歌詞顯示,為 OFF時(shí),歌詞關(guān)閉。使用 30 前對(duì)它進(jìn)行實(shí)例化 (ToggleButton) ()。獲得開關(guān)狀態(tài)。 歌詞顯示實(shí)現(xiàn) 本播放器以歌詞格式 .Lrc的文件。 下面將介紹如何將 .Lrc中的歌詞讀取出來(lái)并存儲(chǔ)在 Android的配文件中 (1).xml配置文件的存儲(chǔ) Android系統(tǒng)目錄結(jié)構(gòu)如下圖: 圖 我們可以看到一個(gè)目錄為 sdcard ,該目錄即為擴(kuò)展卡,里面預(yù)先存放著音頻文件和 .Lrc歌詞文件,我們定義一個(gè) BufferedReader buffer=new BufferedReader(new FileReader(new File(/sdcard/+ musicName + .lrc)))。由于我們要分別存放時(shí)間和歌詞,所以我們應(yīng)該定義兩個(gè) ListString容器來(lái)存放時(shí)間和歌詞。由于歌曲在播放時(shí)會(huì)存在界面之間的跳轉(zhuǎn),所以歌詞必須固定存放在一個(gè)文件中,而不能作為一個(gè)對(duì)象,因此,我們將兩個(gè)時(shí)間 List和歌詞 List再寫進(jìn)一個(gè)配置文件中 . Android提供給我們一個(gè)共享文件的類 SharedPreferences。然后對(duì)象 editor可以存入一個(gè) HashMapkey,values類型的鍵 31 值,即 putString(KEY, VALUES),這樣,我們可以將 List中的對(duì)象轉(zhuǎn)化成一樣長(zhǎng)的字符中放進(jìn)配置文件中 . 當(dāng)寫入成功時(shí), android系統(tǒng)會(huì)自動(dòng)在目錄 data/data/工程包名/shared_prefs/目錄下生成一個(gè)配置文件如 (圖 ) 圖 打開播放模式的配置文件 .xml,文件中是以 map的形式存儲(chǔ)。如下圖: (2).xml配置文件的讀取 我們?nèi)砸圆シ拍J阶x取為例:當(dāng)需要用到播放模式的確定時(shí),我們將讀取 .Xml文件,同樣用共享文件類 SharedPreferences 通過(guò)用方法getSharedPreferences(SET_MSG,MODE_WORLD_READABLE),并且是只讀方式獲得 .Xml的文件內(nèi) 容。此方法當(dāng)該標(biāo)記不存在時(shí)會(huì)默認(rèn)返回一個(gè) null值。 手機(jī)擴(kuò)展卡的訪問(wèn) 程序?qū)崿F(xiàn)了文件瀏覽器的功能,作為一個(gè)文件瀏覽器,應(yīng)該具有瀏覽的功能,當(dāng)程序運(yùn)行到瀏覽界面時(shí),會(huì)有各文件的目錄顯示及圖標(biāo)標(biāo)識(shí)。所以功能比較局限。 文件瀏覽器界面 圖 圖 圖 文件瀏覽器界面布局格式類似上面介紹的菜單,只是在界面的第一行新增了一個(gè)返回根目錄的功能。播放器只需要用到媒體文件,所以代碼也屏蔽了其它文件的子目錄。選中 system會(huì)進(jìn)入到圖 ,該目錄會(huì)顯示 system下的各級(jí)子目錄。 當(dāng)要添加選中的歌曲時(shí),程序有自動(dòng)判斷功能,首先彈出 Dialog(圖 33 )。 圖 圖 文件瀏覽器功能實(shí)現(xiàn) 程序中,文件瀏覽器類為 FileExplorerActivity繼承了 ListActivity,此 Activity是一個(gè) ListView界面。該文件全路徑被存放到數(shù)據(jù)庫(kù)中,以便歌曲播放能查詢到歌曲路徑源 (圖) 圖 該 ListView實(shí)現(xiàn)了自動(dòng)判斷的功能,即程序可以通過(guò)訪問(wèn)擴(kuò)展卡中的文件屬性而自動(dòng)識(shí)別文件屬性。 文件瀏覽器是用遞歸算法實(shí)現(xiàn)的,方法 fillWithRoot() 是返回根目錄的列表。算法如下: items = new ArrayListString()。 for (File file : files) { if (()) { if ((().indexOf(/sdcard)) != 1 || (().indexOf(/system)) != 1) (())。 }} //將文件路徑顯示在界面中 setListAdapter(new MusicAdapter(this, items))。 數(shù)據(jù)存儲(chǔ)方式 在播放器正常運(yùn)行時(shí),由于各界面存在相互跳轉(zhuǎn), 為了避免數(shù)據(jù)在界面跳轉(zhuǎn)的過(guò)程中丟失,我們需要將一些數(shù)據(jù)進(jìn)行臨時(shí)存儲(chǔ)或者
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1