版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 計(jì)算機(jī)學(xué)院課程設(shè)計(jì)</b></p><p> 專 業(yè): 計(jì)算機(jī)應(yīng)用技術(shù) </p><p> 課程名稱: 3G開(kāi)發(fā)基礎(chǔ) </p><p> 課題名稱: 臺(tái)球游戲系統(tǒng) </p>&l
2、t;p> 教 師: </p><p> 學(xué) 號(hào): 姓 名:</p><p> 2013 年 9月 20 日 ——2013 年 12 月 25 日</p><p><b> 前言</b></p><p> Android是基于Linux開(kāi)放性內(nèi)核的
3、操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng)。早期由原名為“Android”的公司開(kāi)發(fā),谷歌在2005年收購(gòu)“Android.Inc”后,繼續(xù)進(jìn)行對(duì)Android系統(tǒng)開(kāi)發(fā)運(yùn)營(yíng),它采用了軟件堆層的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開(kāi)發(fā),部分程序以Java編寫。 </p><p> 2011年初數(shù)據(jù)顯示,僅正式上市兩年的操作系統(tǒng)Android
4、已經(jīng)超越稱霸十年的塞班系統(tǒng),使之躍居全球最受歡迎的智能手機(jī)平臺(tái)。現(xiàn)在,Android系統(tǒng)不但應(yīng)用于智能手機(jī),也在平板電腦市場(chǎng)急速擴(kuò)張。</p><p> 綜合本學(xué)期的學(xué)習(xí),開(kāi)發(fā)一款基于android環(huán)境的臺(tái)球游戲,熟練掌握android應(yīng)用開(kāi)發(fā)。</p><p><b> 課程設(shè)計(jì)目的</b></p><p><b> 1.1關(guān)
5、于java</b></p><p> 1、熟悉Java開(kāi)發(fā)環(huán)境,熟悉用Java完成一個(gè)應(yīng)用程序的設(shè)計(jì)過(guò)程,掌握有關(guān)編 輯、調(diào)試和整合程序的方法和技巧。</p><p> 2、通過(guò)此設(shè)計(jì),了解Java語(yǔ)言的特點(diǎn);熟悉Java程序的編寫;體會(huì)Java語(yǔ)言在問(wèn)題求解中的特點(diǎn)。</p><p> 3、總結(jié)學(xué)習(xí)Java語(yǔ)言的心得和體會(huì),并對(duì)Java課程設(shè)置
6、提出自己的意見(jiàn)和建議。</p><p> 1.2關(guān)于android</p><p> 熟悉android開(kāi)發(fā)環(huán)境,熟悉用java語(yǔ)言實(shí)現(xiàn)一個(gè)安卓程序的設(shè)計(jì)過(guò)程,掌握有關(guān)的設(shè)計(jì)技巧</p><p> 熟悉android開(kāi)發(fā)環(huán)境,熟悉用java語(yǔ)言實(shí)現(xiàn)一個(gè)安卓程序的設(shè)計(jì)過(guò)程,掌握有關(guān)的設(shè)計(jì)技巧</p><p> 通過(guò)此課程設(shè)計(jì),了解and
7、roid系統(tǒng)的特點(diǎn),掌握android相關(guān)的知識(shí)點(diǎn)。</p><p> 總結(jié)學(xué)習(xí)android開(kāi)發(fā)環(huán)境,熟悉用java語(yǔ)言實(shí)現(xiàn)一個(gè)安卓程序的設(shè)計(jì)過(guò)程,掌握有關(guān)的設(shè)計(jì)技巧</p><p> 總結(jié)學(xué)習(xí)android的心得和體會(huì),并且android課程提出自己的意見(jiàn)和建議,從中得到自己的學(xué)習(xí)心得和體會(huì)。</p><p><b> 設(shè)計(jì)任務(wù)及要求</b
8、></p><p> 根據(jù)android課程學(xué)習(xí),將手機(jī)臺(tái)球游戲設(shè)計(jì)的總體設(shè)計(jì)框架以及詳細(xì)的設(shè)計(jì)和實(shí)現(xiàn)過(guò)程通老師講解和自己的理解將其全部以課程設(shè)計(jì)的方式書寫出來(lái)。</p><p><b> 總體設(shè)計(jì)框架</b></p><p><b> 詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)過(guò)程</b></p><p><
9、;b> 4.1配置開(kāi)發(fā)環(huán)境</b></p><p><b> 1、 安裝JDK</b></p><p> 首先將下載的jdk-6u24-windows-i586安裝到C:\下</p><p><b> 2、配置環(huán)境變量</b></p><p> 選擇計(jì)算機(jī)>右鍵&g
10、t;屬性>高級(jí)設(shè)置>環(huán)境變量</p><p> CLASSPATH : .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;</p><p> JAVA_HOME : C:\Program Files(x86)\Java\jdk1.6.0_24</p><p>
11、 Path : %JAVA_HOME%\bin;</p><p> 將以上三個(gè)配置到環(huán)境變量中</p><p> 3、安裝eclipse</p><p> 雙擊eclipse快捷方式圖標(biāo),它會(huì)在你選擇的路徑下生成一個(gè)workspace文件夾,以后的項(xiàng)目都在這里面。</p><p><b> 安裝ADT</b>
12、;</p><p><b> 離線安裝ADT:</b></p><p> 點(diǎn)擊eclipse上的help進(jìn)入如圖所示,點(diǎn)擊add將ADT導(dǎo)入</p><p> 若安裝成功則會(huì)出現(xiàn)如圖所示的navigate下面手機(jī)圖標(biāo)。</p><p><b> 安裝SDK</b></p>&l
13、t;p> 點(diǎn)擊window進(jìn)入preference,然后點(diǎn)擊android,在SDK Location中導(dǎo)入SDK,安裝成功之后如圖所示。</p><p><b> 4.2功能定義</b></p><p> 臺(tái)球游戲是根據(jù)人們?nèi)粘V写蚺_(tái)球的模式進(jìn)行模擬式的通過(guò)點(diǎn)擊按鈕來(lái)調(diào)準(zhǔn)角度并出擊球桿。</p><p> 選擇【開(kāi)始游戲】之后可
14、選擇【倒計(jì)時(shí)模式】和【練習(xí)模式】進(jìn)行玩臺(tái)球游戲,另外還可以點(diǎn)擊【排行榜】查看分?jǐn)?shù)情況,倒計(jì)時(shí)模式是在一定的時(shí)間進(jìn)行玩游戲,練習(xí)模式是對(duì)于初次玩臺(tái)球游戲的玩家或者不熟練的玩家。</p><p><b> 4.3類的設(shè)計(jì)</b></p><p><b> 4.4類的功能</b></p><p><b> 各個(gè)類
15、功能清單</b></p><p><b> 4.5類的特點(diǎn)</b></p><p> 4.5.1抽象類WhatMessage的描述</p><p> public class WhatMessage{</p><p> public static final int GOTO_WELLCOME_VIE
16、W=0; //歡迎界面</p><p> public static final int GOTO_MAIN_MENU_VIEW=1 ; //主菜單界面</p><p> public static final int GOTO_GAME_VIEW=2;//游戲界面</p><p> public static final int GOTO_SOUND
17、_CONTORL_VIEW=3; //聲音控制界面</p><p> public static final int GOTO_WIN_VIEW=4;//勝利界面</p><p> public static final int GOTO_FAIL_VIEW=5;//失敗界面</p><p> public static final int
18、 GOTO_HIGH_SCORE_VIEW=6; //排行榜界面</p><p> public static final int GOTO_HELP_VIEW=7; //幫助界面</p><p> public static final int GOTO_ABOUT_VIEW=8; //關(guān)于界面</p><p> public
19、static final int GOTO_CHOICE_VIEW=9; //選擇界面</p><p> public static final int OVER_GAME=10; //游戲結(jié)束</p><p><b> }</b></p><p> 這個(gè)類主要是標(biāo)識(shí)所有SurfaceView的常量,這些界面的
20、常量用數(shù)字0至10表示的好處是:在后面的編程過(guò)程中更快捷,而且簡(jiǎn)單明了。</p><p><b> 4.5.2界面設(shè)置</b></p><p> public class AboutView extends ViewGroup{</p><p> Paint paint;//畫筆引用</p><p>
21、Bitmap bgBitmap;//背景圖片</p><p> Bitmap bmp;//文字的圖片</p><p> float bmpx;//文字位置</p><p> public AboutView(GameActivity activity) {</p><p> super(activit
22、y);</p><p> setWillNotDraw(false);</p><p> paint=new Paint();//創(chuàng)建畫筆</p><p> paint.setAntiAlias(true);//打開(kāi)抗鋸齒</p><p> initBitmap();//初始化位圖資源</p>
23、<p><b> }</b></p><p> //確定View的大小</p><p><b> @Override</b></p><p> protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {</p>
24、<p> this.setMeasuredDimension(bgBitmap.getWidth(), bgBitmap.getHeight());</p><p><b> }</b></p><p> //確定各子控件的位置與大小,調(diào)用子控件的layout函數(shù)進(jìn)行</p><p><b> @Override
25、</b></p><p> protected void onLayout(boolean changed, int l, int t, int r, int b) {</p><p><b> }</b></p><p><b> //顯示函數(shù)</b></p><p><b
26、> @Override</b></p><p> public void onDraw(Canvas canvas) {</p><p> canvas.drawBitmap(bgBitmap, 0, 0, paint);</p><p> canvas.drawBitmap(bmp, bmpx+Constant.X_OFFSET, Con
27、stant.BMP_Y+Constant.Y_OFFSET, paint);</p><p><b> }</b></p><p><b> //加載圖片的方法</b></p><p> public void initBitmap(){</p><p> bgBitmap=BitmapFa
28、ctory.decodeResource(this.getResources(), R.drawable.help);</p><p> bmp=BitmapFactory.decodeResource(this.getResources(), R.drawable.bmp0);</p><p> bgBitmap=PicLoadUtil.scaleToFitFullScreen(b
29、gBitmap, Constant.wRatio, Constant.hRatio);</p><p> bmp=PicLoadUtil.scaleToFit(bmp, Constant.ssr.ratio);</p><p> //初始化圖片的位置</p><p> bmpx=(Constant.SCREEN_WIDTH-bmp.getWidth())/2;
30、</p><p><b> }</b></p><p><b> }</b></p><p> 界面設(shè)置的類繼承ViewGroup,使用onMeasure確定view大小、onLayo確定各個(gè)子控件的位置與大小,onDraw方法顯示函數(shù),initBitmao方法加載圖片。</p><p>&
31、lt;b> 4.5.3監(jiān)聽(tīng)器</b></p><p> public class KeyThread extends Thread {</p><p> private boolean flag=true;</p><p> GameView gameView;</p><p> private int slee
32、pSpan=40;</p><p> private float changeSpeedTime=80f;//改變速度的時(shí)間點(diǎn)</p><p> public KeyThread(GameView gameView)</p><p><b> {</b></p><p> this.gameView=gameVi
33、ew;</p><p><b> }</b></p><p><b> @Override</b></p><p> public void run()</p><p><b> {</b></p><p> while(flag)</p
34、><p><b> {</b></p><p> if(!((gameView.keyState&0x20)==0))//第6位是1,可以改變按下按鈕時(shí)間</p><p><b> {</b></p><p> gameView.btnPressTime+=3.5f;</p>
35、<p><b> }</b></p><p> if(!((gameView.keyState&0x1)==0))//和00001按位或,判斷第1位是否為1,標(biāo)志向左移</p><p><b> {</b></p><p> if(gameView.btnPressTime<change
36、SpeedTime)//如果按鍵時(shí)間不足</p><p><b> {</b></p><p> gameView.cue.rotateLeftSlowly();//將球桿慢速左轉(zhuǎn)</p><p><b> }</b></p><p> else//如果按鍵超過(guò)規(guī)定時(shí)間</p>
37、<p><b> {</b></p><p> gameView.cue.rotateLeftFast();//將大炮快速左轉(zhuǎn)</p><p><b> }</b></p><p><b> }</b></p><p> else if(!((game
38、View.keyState&0x2)==0))//和00010按位或,判斷第2位是否為1,標(biāo)志向右移</p><p><b> {</b></p><p> if(gameView.btnPressTime<changeSpeedTime)//如果按鍵時(shí)間不足</p><p><b> {</b><
39、;/p><p> gameView.cue.rotateRightSlowly();//將球桿慢速右轉(zhuǎn)</p><p><b> }</b></p><p> else//如果按鍵超過(guò)規(guī)定時(shí)間</p><p><b> {</b></p><p> gameView.c
40、ue.rotateRightFast();//將大炮快速右轉(zhuǎn)</p><p><b> }</b></p><p><b> }</b></p><p><b> try{</b></p><p> Thread.sleep(sleepSpan);//睡眠指定毫秒數(shù)&l
41、t;/p><p><b> }</b></p><p> catch(Exception e){</p><p> e.printStackTrace();//打印堆棧信息</p><p><b> }</b></p><p><b> }</b>
42、</p><p><b> }</b></p><p> public void setFlag(boolean flag) {</p><p> this.flag = flag;</p><p><b> }</b></p><p><b> }<
43、;/b></p><p> 這監(jiān)聽(tīng)器是起監(jiān)聽(tīng)作用的線程類,這段代碼是監(jiān)聽(tīng)觸控按鍵的線程類,這個(gè)線程是對(duì)球桿角度偏移進(jìn)行控制。</p><p> 4.5.4線程間通信</p><p> Handler myHandler = new Handler(){//處理各個(gè)SurfaceView發(fā)送的消息</p><p> public
44、void handleMessage(Message msg) {</p><p> switch(msg.what)</p><p><b> {</b></p><p> case WhatMessage.GOTO_MAIN_MENU_VIEW:</p><p> gotoMainMenuView();<
45、;/p><p><b> break;</b></p><p> case WhatMessage.GOTO_GAME_VIEW:</p><p> gotoGameView();</p><p><b> break;</b></p><p> case WhatMe
46、ssage.GOTO_SOUND_CONTORL_VIEW:</p><p> gotoSoundControlView();</p><p><b> break;</b></p><p> case WhatMessage.GOTO_WIN_VIEW:</p><p> gotoWinView();</
47、p><p><b> break;</b></p><p> case WhatMessage.GOTO_FAIL_VIEW:</p><p> gotoFailView();</p><p><b> break;</b></p><p> case WhatMess
48、age.GOTO_HIGH_SCORE_VIEW:</p><p> gotoHighScoreView();</p><p><b> break;</b></p><p> case WhatMessage.GOTO_WELLCOME_VIEW:</p><p> gotoWellcomeView();<
49、;/p><p><b> break;</b></p><p> case WhatMessage.GOTO_HELP_VIEW:</p><p> gotoHelpView();</p><p><b> break;</b></p><p> case WhatMe
50、ssage.GOTO_ABOUT_VIEW:</p><p> gotoAboutView();</p><p><b> break;</b></p><p> case WhatMessage.GOTO_CHOICE_VIEW:</p><p> gotoChoiceView();</p>&l
51、t;p><b> break;</b></p><p> case WhatMessage.OVER_GAME:</p><p> goToOverView();</p><p><b> break;</b></p><p><b> }</b></p&
52、gt;<p><b> }</b></p><p><b> };</b></p><p> 線程間的通信需要用到Handler來(lái)發(fā)送消息。線程之間的通信的原理是,線程通過(guò)Handler將消息發(fā)送出去,發(fā)出去的消息就會(huì)到進(jìn)入到MessageQueue中,然后再通過(guò)Looper將消息循環(huán)的發(fā)送出去。msg.what是Messge
53、對(duì)象的屬性,起到標(biāo)示作用。</p><p> 4.5.5自定義按鈕</p><p> public class ImageButtonEx extends Button {</p><p> protected Bitmap btBitmap;</p><p> protected boolean bButtonPressed=fal
54、se;</p><p> public ImageButtonEx(Context context){</p><p> super(context);</p><p><b> }</b></p><p> public ImageButtonEx(Context context,Bitmap btBitmap
55、){</p><p> super(context);</p><p> this.btBitmap=btBitmap;</p><p> setBackgroundDrawable(null);</p><p><b> }</b></p><p> 自定義按鈕的好處是,可以根據(jù)自己的
56、喜愛(ài)和需要來(lái)繪制按鈕,可以使你的游戲界面做得更漂亮,吸引大眾的眼球。在這個(gè)游戲中的自定義按鈕需要用到圖形圖像處理中的畫布(Canvas)、畫筆(Paint)和位圖(Bitmap)。</p><p><b> 4.5.6定時(shí)器</b></p><p><b> //繪制時(shí)間的方法</b></p><p> public
57、 void drawSelf(Canvas canvas,Paint paint){</p><p> int second=this.leftSecond%60;</p><p> int minute=this.leftSecond/60;</p><p><b> //繪制秒鐘</b></p><p>
58、 drawNumberBitmap(second,numberBitmaps,endX+Constant.X_OFFSET,endY+Constant.Y_OFFSET,canvas, paint);</p><p><b> //繪制分隔符</b></p><p> int secondLength=(second+"").length()&
59、lt;=1 ? (second+"").length()+1 : (second+"").length();</p><p> float breakMarkX=endX-secondLength*numberWidth-breakMarkWidth;</p><p> float breakMarkY=endY;</p><
60、p> canvas.drawBitmap(breakMarkBitmap, breakMarkX+Constant.X_OFFSET, breakMarkY+Constant.Y_OFFSET,paint);//繪制時(shí)間分隔符圖片</p><p><b> //繪制分鐘</b></p><p> float miniteEndX=breakMarkX;&l
61、t;/p><p> float miniteEndY=endY;</p><p> drawNumberBitmap(minute,numberBitmaps,miniteEndX+Constant.X_OFFSET,miniteEndY+Constant.Y_OFFSET,canvas, paint);</p><p><b> }</b>
62、</p><p> 4.5.7 數(shù)據(jù)存儲(chǔ)</p><p> //打開(kāi)或創(chuàng)建數(shù)據(jù)庫(kù)的方法</p><p> public void openOrCreateDatabase()</p><p><b> {</b></p><p><b> try</b></p
63、><p><b> {</b></p><p> sld=SQLiteDatabase.openDatabase</p><p><b> (</b></p><p> "/data/data/com.bn.d2.bill/mydb", //數(shù)據(jù)庫(kù)所在路徑</p>
64、;<p> null, //CursorFactory</p><p> SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY //讀寫、若不存在則創(chuàng)建</p><p><b> );</b></p><p> String sql=&
65、quot;create table if not exists highScore" +</p><p><b> "( " +</b></p><p> "score integer," +</p><p> "date varchar(20)" +</p>
66、;<p><b> ");";</b></p><p> sld.execSQL(sql);</p><p><b> }</b></p><p> catch(Exception e)</p><p><b> {</b></
67、p><p> Toast.makeText(this, "數(shù)據(jù)庫(kù)錯(cuò)誤:"+e.toString(), Toast.LENGTH_SHORT).show();</p><p><b> }</b></p><p><b> }</b></p><p> //關(guān)閉數(shù)據(jù)庫(kù)的方法&l
68、t;/p><p> public void closeDatabase()</p><p><b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> sld.close();</p
69、><p><b> }</b></p><p> catch(Exception e)</p><p><b> {</b></p><p> Toast.makeText(this, "數(shù)據(jù)庫(kù)錯(cuò)誤:"+e.toString(), Toast.LENGTH_SHORT).sh
70、ow();;</p><p><b> }</b></p><p><b> }</b></p><p><b> //插入記錄的方法</b></p><p> public void insert(int score,String date)</p>&
71、lt;p><b> {</b></p><p><b> try</b></p><p><b> {</b></p><p> String sql="insert into highScore values("+score+",'"+d
72、ate+"');";</p><p> sld.execSQL(sql);</p><p> sld.close();</p><p><b> }</b></p><p> catch(Exception e)</p><p><b> {<
73、/b></p><p> Toast.makeText(this, "數(shù)據(jù)庫(kù)錯(cuò)誤:"+e.toString(), Toast.LENGTH_SHORT).show();;</p><p><b> }</b></p><p><b> }</b></p><p>&l
74、t;b> //查詢的方法</b></p><p> public String query(int posFrom,int length)//開(kāi)始的位置,要查尋的記錄條數(shù)</p><p><b> {</b></p><p> StringBuilder sb=new StringBuilder();//要返回
75、的結(jié)果</p><p> Cursor cur=null;</p><p> openOrCreateDatabase();</p><p> String sql="select score,date from highScore order by score desc;";</p><p> cur=sld.r
76、awQuery(sql, null);</p><p><b> try</b></p><p><b> { </b></p><p> cur.moveToPosition(posFrom);//將游標(biāo)移動(dòng)到指定的開(kāi)始位置</p><p> int count=0;
77、//當(dāng)前查詢記錄條數(shù)</p><p> while(cur.moveToNext()&&count<length)</p><p><b> {</b></p><p> int score=cur.getInt(0);</p><p> String date=cur.getStr
78、ing(1); </p><p> sb.append(score);</p><p> sb.append("/");</p><p> sb.append(date);</p><p> sb.append("/");//將記錄用"/"分隔開(kāi)
79、</p><p><b> count++;</b></p><p> } </p><p><b> }</b></p><p> catch(Exception e)</p><p><b> {</b></p&g
80、t;<p> Toast.makeText(this, "數(shù)據(jù)庫(kù)錯(cuò)誤:"+e.toString(), Toast.LENGTH_SHORT).show();</p><p><b> }</b></p><p><b> finally</b></p><p><b>
81、{</b></p><p> cur.close();</p><p> closeDatabase();</p><p><b> }</b></p><p> //轉(zhuǎn)換成字符,并返回</p><p> return sb.toString();</p>&l
82、t;p><b> }</b></p><p> //得到數(shù)據(jù)庫(kù)中記錄條數(shù)的方法</p><p> public int getRowCount()</p><p><b> {</b></p><p> int result=0;</p><p> Curs
83、or cur=null;</p><p> openOrCreateDatabase();</p><p><b> try</b></p><p><b> {</b></p><p> String sql="select count(score) from highScore
84、;"; </p><p> cur=sld.rawQuery(sql, null);</p><p> if(cur.moveToNext())</p><p><b> {</b></p><p> result=cur.getInt(0);</p><p><b
85、> }</b></p><p><b> }</b></p><p> catch(Exception e)</p><p><b> {</b></p><p> Toast.makeText(this, "數(shù)據(jù)庫(kù)錯(cuò)誤:"+e.toString(),
86、 Toast.LENGTH_SHORT).show();</p><p><b> }</b></p><p><b> finally</b></p><p><b> {</b></p><p> cur.close();</p><p>
87、 closeDatabase();</p><p><b> }</b></p><p> return result;</p><p><b> }</b></p><p> 這個(gè)游戲中的數(shù)據(jù)存儲(chǔ)用到的是SQLite數(shù)據(jù)庫(kù)。SQLite是一個(gè)開(kāi)源的嵌入式關(guān)系數(shù)據(jù)庫(kù),它可以減少應(yīng)用程序管理數(shù)
88、據(jù)的開(kāi)銷,可移植性好,很容易使用,它本身很小,但卻高效而且可靠。嵌入式數(shù)據(jù)庫(kù)的一大好處是在程序內(nèi)部不需要網(wǎng)絡(luò)配置,也不需要管理。使用SQLite數(shù)據(jù)存儲(chǔ)需要熟悉SQL語(yǔ)句的使用。使用SQLite數(shù)據(jù)庫(kù)首先需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù),相關(guān)記錄就會(huì)在數(shù)據(jù)庫(kù)中。</p><p><b> 4.5.8多線程</b></p><p> public void run(){</p&
89、gt;<p> for(int i=0;i<totalSleepTime/sleepSpan;i++) {</p><p> SurfaceHolder myholder=WinView.this.getHolder();</p><p> Canvas canvas = myholder.lockCanvas();</p><p><
90、;b> try {</b></p><p> synchronized (myholder) {</p><p> render(canvas);</p><p><b> }</b></p><p> } finally {</p><p> if (canvas
91、!= null) {</p><p> myholder.unlockCanvasAndPost(canvas);</p><p><b> }</b></p><p><b> }</b></p><p><b> try{</b></p><p&
92、gt; Thread.sleep(sleepSpan);</p><p><b> }</b></p><p> catch(Exception e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p>
93、;<b> }</b></p><p> 該run方法是實(shí)現(xiàn)Runnable 接口的。關(guān)鍵字synchronized用來(lái)與對(duì)象的互斥鎖聯(lián)系。當(dāng)某個(gè)對(duì)象用synchronized修飾時(shí),表明該對(duì)象在任一時(shí)刻只能有一個(gè)線程訪問(wèn)。當(dāng)線程執(zhí)行到synchronized塊結(jié)束時(shí),需要釋放對(duì)象鎖。當(dāng)在synchronized塊中遇到break,return或拋出Exception,則自動(dòng)釋放對(duì)象鎖
94、。</p><p><b> 4.5.9信息提示</b></p><p> Toast.makeText(this, "數(shù)據(jù)庫(kù)錯(cuò)誤:"+e.toString(), Toast.LENGTH_SHORT).show();</p><p> Toast(提示)是Android中用來(lái)顯示提示消息的一種機(jī)制。Toast沒(méi)有焦點(diǎn)
95、且顯示的時(shí)間有限,不會(huì)打斷用戶的當(dāng)前操作,不能與用戶交互,顯示一段時(shí)間后會(huì)自動(dòng)消失。顯示時(shí)長(zhǎng)有有兩個(gè):一個(gè)是Toast.LENGTH_SHORT(短時(shí)間),另一種是Toast.LENGTH_LONG(長(zhǎng)時(shí)間)。</p><p> 4.5.10布局管理</p><p> <LinearLayout xmlns:android="http://schemas.android
96、.com/apk/res/android"</p><p> android:orientation="vertical"</p><p> android:layout_width="fill_parent"</p><p> android:layout_height="fill_parent&q
97、uot;</p><p><b> ></b></p><p> <TextView </p><p> android:layout_width="fill_parent" </p><p> android:layout_height="wrap_content&q
98、uot; </p><p> android:text="@string/hello"</p><p><b> /></b></p><p> </LinearLayout></p><p> 此次布局用到的是線性布局,排列方式是相對(duì)于手機(jī)屏幕垂直排布,寬高占滿整個(gè)手機(jī)屏幕
99、,文字大小的高是包裹內(nèi)容,寬是占滿手機(jī)屏幕。</p><p><b> 設(shè)計(jì)小結(jié)</b></p><p> 在本次課程設(shè)計(jì)中,我學(xué)到了很多的知識(shí),我個(gè)人認(rèn)為這個(gè)臺(tái)球游戲編程需要一定的物理和數(shù)學(xué)基礎(chǔ),并且頭腦要保持時(shí)刻清醒,要不然很容易繞暈。在對(duì)Android的學(xué)習(xí)上是我學(xué)會(huì)了怎么將學(xué)到的理論知識(shí)用到實(shí)踐中去,改變了過(guò)去的學(xué)習(xí)方法和學(xué)習(xí)態(tài)度,找到了一門自己很喜歡的學(xué)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--安卓手機(jī)游戲---貪吃蛇
- 安卓課程設(shè)計(jì)報(bào)告
- 安卓開(kāi)發(fā)課程設(shè)計(jì)報(bào)告
- 安卓天氣預(yù)報(bào)課程設(shè)計(jì)
- 安卓天氣預(yù)報(bào)課程設(shè)計(jì)
- 安卓貪吃蛇課程設(shè)計(jì)報(bào)告
- 安卓貪吃蛇課程設(shè)計(jì)報(bào)告
- 安卓游戲畢業(yè)設(shè)計(jì)--基于安卓的“經(jīng)營(yíng)冷飲店”游戲設(shè)計(jì)
- 安卓游戲畢業(yè)設(shè)計(jì)論文
- 安卓 游戲植入廣告
- 安卓課程設(shè)計(jì)報(bào)告--個(gè)人音樂(lè)播放器
- 課程設(shè)計(jì)---安卓計(jì)算器的開(kāi)發(fā)與設(shè)計(jì)
- 安卓經(jīng)典游戲推薦2
- 安卓課程設(shè)計(jì)論文-“康園圈”校園購(gòu)物平臺(tái)
- 安卓課程設(shè)計(jì)——新聞客戶端(基于網(wǎng)頁(yè)抓取)
- 《安卓appsui設(shè)計(jì)》課程標(biāo)準(zhǔn)
- 瘋狂猜歌安卓游戲歌名答案
- 剪刀游戲課程設(shè)計(jì)
- 紙牌游戲課程設(shè)計(jì)
- 紙牌游戲課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論