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

正文內(nèi)容

基于android系統(tǒng)的midi音樂播放器的設(shè)計與實現(xiàn)畢業(yè)論文(編輯修改稿)

2025-07-25 00:42 本頁面
 

【文章內(nèi)容簡介】 ite數(shù)據(jù)庫。 Android系統(tǒng)為開發(fā)者提供了一個MediaStore這個類,它是一個多媒體數(shù)據(jù)庫,Android中多媒體信息都可以從這里提取。這個MediaStore包括了多媒體數(shù)據(jù)庫的所有信息,包括音頻,視頻和圖像等。存放媒體信息如TITLE(標題)、ARTIST(藝術(shù)家)、ALBUM(專輯封面)、SIZE(大小)和DATA(路徑)等字段。 MIDI音樂播放器數(shù)據(jù)庫設(shè)計階段,只需要兩張表,第一張表存放所有的歌曲信息(即MediaStore類,只需通過Uri:EXTERNAL_CONTENT_URI來訪問,就可以得到想要的歌曲信息字段,MIDI音樂播放器用到的字段有:_ID(歌曲ID)、TITLE(標題)、ARTIST(藝術(shù)家)、DATA(路徑)、ALBUM(專輯封面)、DURATION(歌曲時間)和ALBUM_ID(專輯封面ID)。,用于存放用戶自己添加歌曲的信息。(favourite)字段名稱數(shù)據(jù)類型允許空說明_IdINTEGERNot null主鍵Music_idINTEGERNot null歌曲IDMusic_nameTEXTNot null歌曲名字Music_aristTEXT演唱者Music_pathTEXTNot null路徑Music_ablumINTEGER專輯封面IDMusic_timeINTEGERNot null歌曲長度 整體流程設(shè)計 MIDI音樂播放器整體流程。 播放控制流程設(shè)計 播放控制模塊是整個設(shè)計控制的核心部分,用戶只需通過簡單的觸摸操作就可以實現(xiàn)對歌曲播放的控制。 歌曲列表流程設(shè)計 MIDI音樂播放器在初始化界面時,從系統(tǒng)數(shù)據(jù)庫獲得SD內(nèi)所有音樂信息;,將這些得到的信息構(gòu)建到列表呈現(xiàn)給用戶,如果這是用戶第一次運行MIDI音樂播放器。掃描完歌曲文件后,掃描/SDCard/。,、添加和刪除操作,然后刷新列表信息。 播放模式流程設(shè)計 播放模式控制即循環(huán)播放、隨機播放、順序播放和單曲循環(huán),其中前三種播放模式采用循環(huán)切換的模式進行選擇,單曲循環(huán)獨立開來,進行開啟或者關(guān)閉。第五章 詳細設(shè)計 MIDI播放器UI設(shè)計 對于Android來說,一個好的應(yīng)用界面的必備條件是:內(nèi)容清晰、指示明白、屏幕美觀和有親切感。UI通常包含圖形和文字,應(yīng)用界面的設(shè)計是對控件進行適當?shù)娜∩峒肮δ艿倪x擇和處理的過程(對控件進行事件監(jiān)聽)。在MIDI播放器的設(shè)計過程中,也是對設(shè)計的方法進行反復(fù)的推敲、琢磨,才能使其達到完美的境界,MIDI播放器界面的整體風(fēng)格為經(jīng)典的黑白色調(diào),界面設(shè)計更簡潔,更大方。 Android的界面寫在“res/layout”下面的布局文件中,一般情況下,一個布局文件對應(yīng)一個界面,這是MIDI播放器所有的布局文件。雖然Android生成屏幕的方有三種(第二章已介紹),但是一般使用xml文件配置生成,這里有必要說一下,其實Android界面的代碼編寫有點像HTML,添加框架,編寫代碼,生成控件。MIDI音樂播放器的每一個可視化界面,都有其的唯一的布局配置文件,該文件里面有各種布局方式:線性布局(Linear Layout)和相對布局(Relative Layout)等,通過各種資源文件如圖像,文字,顏色的引用,和這幾種布局的完美組合,這樣就形成了MIDI播放器不同的可視化界面和絢爛的效果。下面我詳細介紹播放器中的幾個重要布局配置文件的設(shè)計和實現(xiàn)。 歌曲列表界面設(shè)計 在程序初始化后,呈現(xiàn)給用戶的界面就是歌曲列表界面。歌曲列表界面實現(xiàn)了線性布局(Linear Layout)和相對布局(Relative Layout)的相互嵌套,歌曲信息通過ListView控件顯示,它以列表的形式展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適應(yīng)顯示,實現(xiàn)代碼如下所示。ListView android:id=@+id/musiclist android:layout_height=fill_parent android:layout_width=fill_parent android:layout_marginLeft=6dp android:layout_marginRight=6dp android:cacheColorHint=00000000 android:divider=@color/divider_color android:dividerHeight=1dp android:listSelector=@drawable/selector_list_item android:layout_below=@+id/relativeLayout1/ListView在歌曲播放列表使用了SlidingDrawer(滑動式抽屜)這個控件,SlidingDrawer隱藏屏外的內(nèi)容,并允許用戶通過handle以顯示隱藏內(nèi)容,將播放控制界面放在了這個隱藏內(nèi)容中,它可以垂直或水平滑動,布局代碼實現(xiàn)如下所示。 android:id=@+id/slidingDrawer android:layout_width=fill_parent android:layout_height=fill_parent android:handle=@+id/handle android:content=@+id/content android:topOffset=10dp include layout=@layout/sliderdrawer_handle_layout/include include layout=@layout/sliderdrawer_content_layout/include /有時Android自帶的SlidingDrawer控件不能滿足開發(fā)者的需求,重寫SlidingDrawer這個控件,將會為整個系統(tǒng)的界面布局增色不少,重寫實現(xiàn)代碼如下所示。 /* * 獲取控件的屏幕區(qū)域 */ public Rect getRectOnScreen(View view){ Rect rect = new Rect()。 int[] location = new int[2]。 View parent = view。 if(() instanceof View){ parent = (View)()。 } (location)。 (rect)。 (location[0], location[1])。 return rect。 } public boolean onInterceptTouchEvent(MotionEvent event) { // 觸摸位置轉(zhuǎn)換為屏幕坐標 int[] location = new int[2]。 int x = (int)()。 int y = (int)()。 (location)。 x += location[0]。 y += location[1]。 if(mTouchableIds != null){ for(int id : mTouchableIds){ View view = findViewById(id)。 if (()) { Rect rect = getRectOnScreen(view)。 if((x,y)){ if (() == ) { if (mTouchViewClickListener != null) { (view)。 } } return true。 } } } } //抽屜行為控件 if(() == amp。amp。 mHandleId != 0){ View view = findViewById(mHandleId)。 Rect rect = getRectOnScreen(view)。 if((x, y)){//點擊抽屜控件時交由系統(tǒng)處理 { return (event)。 } }else{ return false。 } } return (event)。 } @Override public boolean onTouchEvent(MotionEvent event) { return (event)。 }} 播放控制界面設(shè)計在MIDI音樂播放器界面設(shè)計中,將播放控制界面放在了SlidingDrawer這個控件的隱藏內(nèi)容中,只需點擊歌曲列表界面的下方的按鈕,播放控制界面會從屏幕下方滑出也可以拖動,也可以在此隱藏。 播放控制界面中的重點布局就是自定義的SeekBar(拖動條)這個控件的實現(xiàn),實現(xiàn)的方法就是修改android:progressDrawable和android:thumb這兩個屬性,這兩個屬性自己編寫,實現(xiàn)代碼如下所示。SeekBar android:id=@+id/seekBar android:layout_width=fill_parent android:layout_height=wrap_content android:layout_toRightOf=@id/CurTime android:layout_toLeftOf=@id/TotalTime android:paddingLeft=5dp android:paddingRight=5dp android:max=100 android:progressDrawable=@drawable/seekbar_style android:thumb=@drawable/seekbar_thumb android:background=@drawable/progress_buffering /SeekBar:?xml version= encoding=utf8?layerlist xmlns:android= item android:id=@android:id/secondaryProgress clip android:drawable=@drawable/progress_buffering / item android:id=@android:id/progress clip android:drawable=@drawable/progress_playing //layerlist :?xml version= encoding=utf8?selector xmlns:android= item android:state_pressed=true android:drawable=@drawable/thumb_f / item android:drawable=@drawable/thumb_normal //selector 播放器初始化實現(xiàn) MIDI音樂播放器運行之后,需要一個初始化的過程,這個過程實際就是對SD卡中所有音樂一個掃描的過程,即獲取所有音樂的相關(guān)信息,如歌曲的名字和演唱者等。初始化過程中,獲取音樂的操作做在了一個線程Thread內(nèi),后臺進行查詢數(shù)據(jù)庫操作,線程實現(xiàn)代碼如下所示。 private ArrayListMusicData setMusicDatas() { // TODO Autogenerated method stub Cursor cursor=(, musicdata, null, null, null)。 if(cursor!=null){ ()。 int musicID=()。 int musicTitle=()。 int musicTime=()。 int musicArtist=()。 int musicPath=()。 int mu
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1