Android應用開發(fā)入門(基于Android Studio開發(fā)環(huán)境、任務驅動式) 第2版 課件 5 任務五 翻牌游戲的設計與實現_第1頁
Android應用開發(fā)入門(基于Android Studio開發(fā)環(huán)境、任務驅動式) 第2版 課件 5 任務五 翻牌游戲的設計與實現_第2頁
Android應用開發(fā)入門(基于Android Studio開發(fā)環(huán)境、任務驅動式) 第2版 課件 5 任務五 翻牌游戲的設計與實現_第3頁
Android應用開發(fā)入門(基于Android Studio開發(fā)環(huán)境、任務驅動式) 第2版 課件 5 任務五 翻牌游戲的設計與實現_第4頁
Android應用開發(fā)入門(基于Android Studio開發(fā)環(huán)境、任務驅動式) 第2版 課件 5 任務五 翻牌游戲的設計與實現_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

翻牌游戲的設計與實現任務五重難點04030201MediaPlayer進行音樂的播放和控制自定義數據項的顯示布局GridView的使用ListView的使用知識目標了解ListView組件和GridView組件掌握ListView組件與不同數據源的綁定方式掌握GridView組件與不同數據源的綁定方式掌握Android多媒體架構掌握AndroidMediaPlayer的使用方法能力目標能夠將ListView、GridView與不同數據源進行數據綁定能夠自定義ListView、GridView中子項目的布局能夠實現ListView、GridView中單擊等事件的監(jiān)聽與響應能利用多媒體進行音樂的播放和控制項目流程任務簡介任務分析支撐知識任務實施任務小結擴展訓練任務簡介任務分析支撐知識任務實施任務小結擴展訓練本次任務我們將制作一個運行在Android終端上的翻牌游戲,能夠實現牌面的顯示、隱藏、信息提示及游戲背景音樂的選擇。整個程序由兩個界面構成:游戲界面和背景音樂選擇界面。任務簡介任務分析支撐知識任務實施任務小結擴展訓練進行程序演示,請同學們觀察翻牌游戲實現了哪些功能?包含哪些新組件?開始游戲點擊【背景音樂選擇】圖標任務簡介任務分析支撐知識任務實施任務小結擴展訓練ButtonImageViewGridViewListView水果牌面的定時顯示與隱藏:GridView、定時器的使用;隨機組合圖片:Random類的使用;獲取SD卡上所有音樂并顯示:游標Cursor、ListView;音樂的播放與暫停:MediaPlayer。任務簡介任務分析支撐知識任務實施任務小結擴展訓練任務簡介任務分析支撐知識任務實施任務小結擴展訓練我們已經了解到翻牌游戲的規(guī)則,要完成這個游戲的設計還需要學習以下知識:如何使用ListView、GridView組件;如何將ListView、GridView組件與數據進行綁定;如何對ListView、GridView進行點擊Item的事件監(jiān)聽;如何使用MediaPlayer播放音頻。ListView組件了解ListView重要屬性、方法與單擊事件的監(jiān)聽11.1ListView簡介ListView是Android中最為常用的列表類型組件,它的本質是容器,可以包含多個“列表項”(Item),并將多個Item以垂直列表的形式顯示出來。創(chuàng)建ListView有兩種方式:直接使用ListView組件;讓Activity繼承ListActivity。Item1.2重要屬性屬性作用示例android:divider設置列表項的分隔條android:divider=“@drawable/list_driver”

//分割線為一張圖片android:divider="@drawable/@null“//去掉分割線android:dividerHeight設置分隔條的高度

android:dividerHeight="1px"android:entries指定一個數組資源作為該組件顯示的內容android:entries="@array/myarray"1.2重要屬性屬性作用示例android:stackFromBottom設置是否從底端開始排列列表項android:stackFromBottom="true"android:drawSelectorOnTop該屬性設置為true時單擊某一條記錄,顏色會顯示在最上面,記錄上的文字被遮住。該屬性設置為false時單擊某條記錄不放,顏色會在記錄的后面,成為背景色,但是記錄內容的文字是可見的。android:drawSelectorOnTop="true"android:transcriptMode設置該組件的滾動模式disabled:關閉滾動。若該屬性不設置,則默認為該值;normal:當該組件收到數據改變通知,且最后一個列表項可見時,該組件會滾到到底端;alwaysScroll:該組件總會自動滾動到底端。1.3重要方法方法ListView類:publicpublicvoidsetAdapter(Adapteradapter)作用用于設定ListView組件的適配器Adapter說明參數說明:adapter可以為ArrayAdapter、SimpleAdapter或其他支持的Adapter中的一種。示例ListViewmyList=(ListView)findViewById(R.id.myList);myList.setAdapter(adapter);1.4重要監(jiān)聽器方法ListView類:publicvoidpublicvoidsetOnItemClickListener(AdapterView.OnItemClickListenerlistener)作用ListView的父類提供了一個單擊選項的監(jiān)聽器說明參數說明:監(jiān)聽器是一個實現了AdapterView.OnItemClickListener接口的類的對象。方法AdapterView.OnItemClickListener接口:publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3)作用當ListView的某項被點擊后回調該方法說明參數說明:arg0代表的就是用戶操作的ListView對象;arg1為當前被單擊的Item的View;arg2為被單擊的列表項序號;arg3為被單擊的列表項的id。1.4重要監(jiān)聽器編寫類實現監(jiān)聽器的接口,創(chuàng)建該類的對象ListViewlistView=(listView)findViewById(R.id.listview); //獲得組件的對象listView.setOnItemClickListener(newAdapterView.OnItemClickListener(){

publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3)

{ //TODOAuto-generatedmethodstub

}});1.5示例演示演示如何將字符串數組的內容顯示到ListView;演示如何對ListView添加監(jiān)聽,當監(jiān)聽到單擊時,將選擇結果輸出到屏幕。Adapter2了解Adapter的作用掌握使用ArrayAdapter將數據源與ListView進行綁定掌握使用SimpleAdapter將數據源與ListView進行綁定2.1Adapter簡介Adapter就是AdapterView組件視圖與數據之間的橋梁,Adapter提供對數據項的訪問,同時也負責為每一項數據生成一個View。ListView組件數據Adapter2.1Adapter簡介ListView或GridView與不同的數據源進行綁定時,需要通過不同的Adapter接口的實現類。Adapter常用的實現類如下:ArrayAdapter:用于與數組類型的數據進行綁定;SimpleAdapter:用于與List集合類型的數據數據進行綁定;SimpleCursorAdapter:用于與數據庫查詢結果返回的Cursor對象進行綁定;BaseAdapter:通常被繼承擴展,繼承后可對各列表項進行最大限度的自定義。2.2ArrayAdapter方法publicArrayAdapter(Contextcontext,inttextViewResourceId,List<T>objects)作用ArrayAdapter的構造方法ArrayAdapter一般用于顯示多行簡易的文本信息。說明參數說明:context:上下文,比如MainActivity.this,關聯(lián)ArrayAdapter運行Activity的上下文環(huán)境;textViewResourceId:布局文件的ID(注意這里的布局文件描述的是列表的每一項的布局);objects:數據源(一個List集合)。示例ListViewlv=(ListView)findViewById(R.id.listview);

ArrayAdapter<String>adapter=newArrayAdapter<String>(

MainActivity.this,

android.R.layout.simple_expandable_list_item_1,

getData());//getData為自定義的方法,返回ArrayList<String>類型的數據

lv.setAdapter(adapter);2.2ArrayAdapter示例演示:將ListView與一個字符串類型的List進行綁定創(chuàng)建XML布局文件,加入ListView組件;創(chuàng)建數據源ArrayList<String>;創(chuàng)建ArrayAdapter;使用setAdapter()將ListLiew與ArrayAdapter

綁定。2.3SimpleAdapter方法publicSimpleAdapter(Contextcontext,List<?extendsMap<String,?>>data,intresource,String[]from,int[]to)作用SimpleAdapter的構造方法說明參數說明:context:上下文對象,關聯(lián)SimpleAdapter運行的Activity的上下文對象;data:Map列表,用于顯示的數據。需要用戶自己定義,與from中指定條目一致;resource:單項布局文件的id,可以是自定義的布局,必須包括to中定義的組件id;from:關聯(lián)Map列表的數據項名稱的數組,數組元素是Map中鍵的名稱;to:關聯(lián)自定義布局中各個組件id的數組,數組元素需要與上面的from對應。示例SimpleAdapter是擴展性很好的適配器,和ArrayAdapter相比,SimpleAdapter可以方便地定義數據項的布局。2.3SimpleAdapter使用SimpleAdapter將數據綁定到ListView上,最重要一步是數據和組件的一一對應。顯示效果:ValueKeytextview1textview2CityProvinceHashMap數據ListItem布局綁定南京江蘇省杭州浙江省成都四川省顯示為南京江蘇省杭州浙江省成都四川省ListItem布局:R.layout.item_layout組件IDKeyValue2.3SimpleAdapter示例演示:通過SimpleAdapter將數據顯示到ListView組件上定義XML布局文件,加入ListView組件;自定義單項Item的布局;創(chuàng)建數據源List<Map<String,String>>類型

對象data;創(chuàng)建SimpleAdapter;使用setAdapter()將ListLiew與SimpleAdapter綁定;實現Item點擊的監(jiān)聽器。GridView組件了解GridView重要屬性、方法與單擊事件的監(jiān)聽33.1GridView簡介GridView用于在界面上按網格分布的方式顯示多個組件或項目。GridView和ListView具有共同的父類,因此GridView、ListView用法很相似。他們唯一的區(qū)別在于:ListView以列表方式顯示數據,而GridView以網格方式顯示數據。換個角度看,ListView是一種特殊的只有一列的GridView。3.2重要屬性屬性作用示例android:columnWidth設置列的寬度android:columnWidth=”90dp"http://每列的寬度為90dpandroid:horizontalSpacing設置各元素之間的水平間距android:horizontalSpacing=”10dp”//兩列之間的邊距為10dpandroid:verticalSpacing設置各元素之間的垂直間距android:horizontalSpacing=”10dp”//兩列之間的邊距為10dpandroid:numColumns設置列數,默認值為1android:numColumns=”auto_fit”//自動調整顯示列數android:gravity設置對齊方式android:gravity=“center”//每個元素的內容居中顯示3.2重要屬性垂直方向的間距android:verticalSpacing=40dp水平方向的間距android:horizontalSpacing=20dp列寬android:columnWidth=150dp3.3示例演示示例演示:通過SimpleAdapter將數據顯示到GridView組件上定義XML布局文件;自定義單項Item的布局;創(chuàng)建數據源List<Map<String,String>>類型

對象data;創(chuàng)建SimpleAdapter;使用setAdapter()將GridView與SimpleAdapter綁定;點擊事件監(jiān)聽器。Android播放音頻文件了解Android多媒體架構掌握MediaPlayer的重要方法和事件監(jiān)聽了解MediaPlayer主要狀態(tài)及切換44.1Android多媒體框架MediaPlayer可用于視頻和音頻的播放。MediaRecorder可用于視頻和音頻的錄制。4.2MediaPlayer類的重要方法方法作用示例publicstaticMediaPlayercreate(Contextcontext,Uriuri)創(chuàng)建一個多媒體播放器并加載指定uri的多媒體文件Uriuri=Uri.parse("/test.mp3");MediaPlayermp=MediaPlayer.create(MainActivity.this,uri);publicstaticMediaPlayercreate(Contextcontext,intresid)創(chuàng)建一個多媒體播放器并加載指定資源id的多媒體文件MediaPlayermp=MediaPlayer.create(MainActivity.this,R.raw.test);4.2重要方法方法作用示例publicvoidsetDataSource(Stringpath)通過文件路徑為多媒體播放器指定加載文件Stringpath="/mnt/sdcard/test.mp3";MediaPlayermp=newMediaPlayer();mp.setDataSource(path);publicvoidsetDataSource(Contextcontext,Uriuri)通過文件uri為多媒體播放器指定加載文件Uriuri=Uri.parse("/test.mp3");MediaPlayermp=newMediaPlayer();mp.setDataSource(MainActivity.this,uri);4.2重要方法方法作用示例publicvoidprepare()同步加載,方法返回時已加載完畢Stringpath="/mnt/sdcard/test.mp3";MediaPlayermp=newMediaPlayer();mp.setDataSource(path);.mp.prepare();publicvoidprepareAsync()異步加載,方法返回時未加載完畢,常用于網絡文件的加載。加載完畢之后,才可以對音頻文件進行播放控制Uriuri=Uri.parse("/test.mp3");MediaPlayermp=newMediaPlayer();mp.setDataSource(this,uri);.mp.prepareAsync();4.2重要方法方法作用示例publicvoidstart()開始播放Stringpath="/mnt/sdcard/test.mp3";MediaPlayermp=newMediaPlayer();mp.setDataSource(path);.mp.prepare();mp.start();publicvoidstop()終止播放mp.stop();publicvoidpause()暫停播放mp.pause();4.2重要方法其他重用方法getDuration():返回int,得到歌曲的總時長,以ms(毫秒)為單位;isLooping():返回boolean,判斷是否處于循環(huán)播放模式;isPlaying():返回boolean,是否正在播放;release():無返回值,釋放MediaPlayer對象;reset():無返回值,重置MediaPlayer對象;seekTo(intmsec):無返回值,指定歌曲的播放位置,以ms(毫秒)為單位;setLooping(booleanlooping):無返回值,設置是否循環(huán)播放;setVolume(floatleftVolume,floatrightVolume):無返回值,設置音量。4.3監(jiān)聽器方法MediaPlayer類:publicvoidsetOnCompletionListener(MediaPlayer.OnCompletionListenerlistener)作用設定MediaPlayer音樂播放結束的監(jiān)聽器說明參數說明:listener是MediaPlayer.OnCompletionListener類型的監(jiān)聽器對象。方法MediaPlayer.OnCompletionListener接口:publicvoidonCompletion(MediaPlayermp)作用MediaPlayer.OnCompletionListener接口中的抽象方法音樂播放完畢后回調說明參數說明:mp表示當前MediaPlayer組件4.3監(jiān)聽器方法MediaPlayer類:publicvoidsetOnPreparedListener(MediaPlayer.OnPreparedListenerlistener)作用設定音樂加載完畢的監(jiān)聽器說明參數說明:listener是MediaPlayer.OnPreparedListener類型的監(jiān)聽器對象。方法MediaPlayer.OnPreparedListener接口:publicvoidOnPrepared(MediaPlayermp)作用MediaPlayer.OnPreparedListener接口中的抽象方法音樂加載完畢后回調說明參數說明:mp表示當前MediaPlayer組件4.4MediaPlayer狀態(tài)圖請注意:1.MediaPlayer中不同狀態(tài)可以調用的方法不同。2.在某個狀態(tài)調用了非不應該使用的方法,會引發(fā)MediaPlayer報錯。4.5示例演示示例演示:制作一個簡易的播放器,實現以下功能:播放暫停繼續(xù)停止游標Cursor了解數據庫查詢的方法掌握如何使用Cursor遍歷查詢返回的數據集55.1Cursor簡介當我們對數據庫對象db使用db.query()查詢方法時,就會得到Cursor對象,Cursor所指向的就是查詢所返回的數據集。query()方法的調用方式為:query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy)String

table

=

"Orders";

String[]

columns

=

new

String[]

{"CustomerName",

"OrderPrice"};

String

selection

=

"Country=?";

String[]

selectionArgs

=

new

String[]{"China"};

String

orderBy

=

"CustomerName";

Cursor

c

=

db.query(table,

columns,

selection,

selectionArgs,

null,

null,

orderBy);

5.1Cursor簡介示例:從右表中查找出來自中國的所有客戶的名稱及其訂單價格。IdCustomerNameOrderPriceCountryOrderDate1Arc100China2010/1/22Bor200USA2010/3/203Cut500Japan2010/2/204Bor300USA2010/3/25Arc600China2010/3/256Doom200China2010/3/265.2示例演示示例演示:讀出SD卡中所有歌曲的信息并將其顯示到ListView自定義ListView中每一項的布局文件使用getContentResolver().query()查詢到SD卡上所有歌曲信息通過cursor.moveToNext()遍歷返回結果,將數據重組為List<Map<String,Object>>類型的data通過SimpleAdapter將數據綁定到ListView組件上任務簡介任務分析支撐知識任務實施任務小結擴展訓練總體分析項目布局功能實現運行程序翻牌游戲總體分析11.1總體分析在“翻牌游戲”應用程序中,需要實現兩個Activity:游戲界面和歌曲列表界面。開始游戲點擊背景音樂選擇圖標1.2主要流程游戲區(qū)域包含9張圖片,顯示默認圖案。用戶單擊“開始游戲”按鈕后,隨機顯示水果圖片及對應名稱,2秒后恢復成默認圖案。隨機生成目標水果,系統(tǒng)根據用戶選擇是否正確給出對應提示消息。程序啟動,載入游戲界面顯示隨機牌面,2秒后恢復默認牌面生成隨機問題,Toast提示用戶用戶單擊GridView,選擇正確?提示正確信息并顯示所有牌面提示用戶錯誤信息Y用戶單擊“開始游戲”按鈕N1.2主要流程游戲默認無背景音樂,單擊背景音樂選擇按鈕進入音樂列表界面。列表上顯示了用戶SD卡上所有歌曲的相關信息,如歌曲名稱、演唱者。用戶單擊歌曲選擇背景音樂,音樂循環(huán)播放,從SD卡獲取歌曲信息用戶單擊ListView中某一項將歌曲信息顯示到ListView循環(huán)播放指定曲目項目布局22.1創(chuàng)建項目創(chuàng)建一個Android應用程序項目,取名為CardGame;默認的Activity的名稱為MainActivity,其對應的XML布局文件為res\layout\activity_main.xml,該Activity用于翻牌游戲主界面。新建一個新的BgMusicActivity,對應XML布局文件為res\layout\activity_bg_music.xml,該Activity用于顯示SD卡上所有的歌曲并播放。2.1游戲界面布局使用默認的相對布局。該界面包含3個組件。Button用于開始游戲,ImageView用于跳轉到音樂列表,GridView用于顯示所有水果圖片與名稱。ConstrainLayout開始按鈕3X3GridView2.1游戲界面布局GridView的每一項需要用戶自定義布局,創(chuàng)建gridview_item.xml為GridView單項布局文件。采用垂直線性布局,包含一個ImageView與一個TextView。LinearLayout水果圖片水果名稱2.2音樂列表界面布局使用默認相對布局,界面只包含一個ListView組件用于顯示所有歌曲信息。ListView中每一項的布局方式需要用戶自定義。創(chuàng)建布局文件music_item.xml。采用的是水平線性布局樣式,包含ImageView和一個垂直線性布局,ImageView用于顯示音樂圖標;垂直線性布局包括兩個TextView用于顯示歌曲的名稱和演唱者。LinearLayout(水平)LinearLayout(垂直)音樂圖標歌曲名稱演唱者LinearLayoutListView功能實現-水果界面3在MainActivity中,聲明游戲元素相關的成員變量:privateButtonbutton;//開始游戲

privateGridViewgridView;//用于顯示所有水果圖片及名稱

privateImageViewgbMusic;//背景音樂圖標,用于跳轉到背景音樂界面

privateTextViewtextViewResult;//用于顯示游戲結果

privateSimpleAdapteradapter;//用于綁定GridView數據

ArrayList<HashMap<String,Object>>listData=newArrayList<HashMap<String,Object>>();//GridView要綁定的數據

finalintMAX=9;//水果個數

finalint[]imgRes=newint[]{R.drawable.kiwi,R.drawable.jujube,R.drawable.lemon,R.drawable.cherry,

R.drawable.mango,R.drawable.apple,R.drawable.grape,R.drawable.watermenlon,R.drawable.banana};

finalString[]nameRes={"奇異果","棗子","檸檬","櫻桃","芒果","蘋果","葡萄","西瓜","香蕉"};

ArrayList<Integer>listFruitPos=newArrayList<>();//每張紙牌對應的水果序號intguessNum=-1;//目標水果下標

Handlerhandler;//用于處理倒計時句柄3.1游戲界面——成員變量3.1游戲界面——成員變量0奇異果1棗子2檸檬3櫻桃4芒果5蘋果6葡萄7西瓜8香蕉ArrayList<Integer>listFruitPos;guessnum=5;0(奇異果)1(棗子)2(檸檬)3(櫻桃)4(芒果)5(蘋果)6(葡萄)7(西瓜)8(香蕉)String[]nameRes;6(葡萄)3(櫻桃)2(檸檬)5(蘋果)4(芒果)0(奇異果)8(香蕉)1(棗子)7(西瓜)洗牌3.2onCreate初始化開始initViews()獲取組件結束setListeners()設定監(jiān)聽器initHandler()初始化句柄各種findViewByIdinitListData()初始化listData數據顯示“默認圖片+?”開始創(chuàng)建并綁定SimpleAdapterinitListData()開始清除listData已有的數據結束創(chuàng)建HashMap以key-value的形式保存“img”:R.drawable.ic_launcher_background“name”:“?”結束將HashMap添加到listData中循環(huán)MAX次?YNinitViews()將0-8依次放入到listFruitPos中3.3點擊開始游戲按鈕開始初始化guessNumCollections.shuffle(listFruitPos);隨機打亂水果位置adapter.notifyDataSetChanged();刷新ListViewupdateListData()將水果信息保存到ArrayList數據中結束開啟子線程updateListData()開始清除listData已有的數據結束創(chuàng)建HashMap以key-value的形式保持“Img”:隨機排列水果的圖片“name”:隨機排列水果的文字并添加到listdata中將HashMap添加到listData中循環(huán)MAX次?YN3.3點擊開始游戲按鈕子線程Thread負責耗時的操作主UI線程負責與用戶操作交互Sleep2000msHandler發(fā)送消息MessageHandler接收消息initData初始化數組數據adapter.notifyDataSetChanged();

更新GridView顯示生成一個0-MAX之間的隨機數Toast提示用戶請選擇該隨機數對應的水果3.4點擊GridView某一項Y開始guessNum==-1游戲未開始?Toast提示請先點擊開始游戲按鈕!N點擊項的序號是否與目標水果序號guessNum一致?updateListData更新數據Y結束NToast提示猜錯了Toast提示猜對了guessNum初始化adapter.notifyDataSetChanged()刷新ListView3.4點擊背景音樂按鈕開始跳轉到BgMusicActivity結束功能實現-背景音樂界面4根據分析,需要讀取SD卡上所有歌曲的名稱、演唱

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論