第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器

Slides:



Advertisements
Similar presentations
從 Android SDK 3.0 開始增加了 2 個新的類別: Fragment 與 Action Bar 。 Fragment 提供不同佈局畫面的另一種用法,但 設計更有彈性,更能針對螢幕大小變化,採用 最合適的設計,例如對較大螢幕的平板裝置, 它可以在一個活動的畫面同時顯示 2 個 Fragment.
Advertisements

Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
第一單元 建立java 程式.
第2章  Android应用的界面编程.
第16章 首頁畫面小工具與硬體介面 16-1 首頁畫面小工具-手機靜音切換 16-2 感測器與遊戲控制-跳跳球遊戲
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
第15章 網路與通訊 15-1 WebView元件-行動瀏覽器 15-2 簡訊處理-我的簡訊 15-3 寄送電子郵件-郵件寄送工具
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
ArrayAdapter & Spinner
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
實驗四:單位轉換程式.
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
第14章 Google地圖與定位服務 14-1 定位服務-我在哪裡 14-2 地圖解碼服務-找出景點座標
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
第10章 App微信分享的实现 倚动实验室.
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
客戶端的檔案上傳 HtmlInputFile檔案控制項 上傳單一檔案 同時上傳多個檔案.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Chapter 6 進階UI設計.
第4章 Android生命周期.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
ANDROID PROGRAMMING2.
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
實驗十四:顯示與控制地圖.
第2讲 移动应用开发基础知识(二) 宋婕
安裝JDK 安裝Eclipse Eclipse 中文化
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第8章 Service解析.
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
Java 程式設計 講師:FrankLin.
第一單元 建立java 程式.
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
Android Application Component
ArrayAdapter & Spinner
Chapter 5 Basic UI Design.
Visual C++ Windows Programming
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
第二章 Java语法基础.
CustomView(自定義視圖) 、 畫布、顏色及多點觸控 靜宜大學資管系 楊子青
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
第二章 Java基本语法 讲师:复凡.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
RecyclerView and CardView
實驗十:影片播放.
Android Speech To Text(STT)
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
第9章 BroadcastReceiver的使用
加速感測器 靜宜大學資管系 楊子青.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
SQLite資料庫 靜宜大學資管系 楊子青.
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器 13-4 聲音處理-錄音程式 13-5 2D繪圖-井字遊戲

13-1 顯示圖檔-行動相簿(說明) 行動相簿是一個在手持行動裝置瀏覽照片的程式,筆者準備用來說明如何在Android應用程式顯示圖檔,在實務上,我們可以將活動、旅遊、人或寵物照片收集建立成相簿程式,隨時隨地分享照片給其他人。 這個範例是使用ListActivity類別建立ListView元件顯示照片的分類目錄,然後使用Gallery元件導覽目錄下各照片的縮圖,只需選擇照片縮圖,就可以在下方ImageView元件顯示較大且清晰的照片。

13-1 顯示圖檔-行動相簿 步驟一:開啟和執行Android專案 請啟動Eclipse IDE開啟Android專案Ch13_1,內含2個Java類別檔、一個版面配置檔mygallery.xml、2個資源檔strings.xml和attrs.xml和一些照片的PNG格式圖檔,其執行結果如下圖所示:

13-1 顯示圖檔-行動相簿 步驟二:建立照片的圖形資源 行動相簿的主要目的是顯示照片,所以我們需要建立照片的圖形資源,筆者共建立2種不同解析度的圖檔,如右圖所示:

13-1 顯示圖檔-行動相簿 步驟三:建立分類目錄的ListActivity類別-1 行動相簿的分類目錄是使用ListView元件,筆者直接建立ListActivity類別來顯示目錄,所以沒有使用版面配置檔main.xml,如下所示: public class Ch13_1Activity extends ListActivity { … }

13-1 顯示圖檔-行動相簿 步驟三:建立分類目錄的ListActivity類別-2 onCreate()方法 在onCreate()方法使用ArrayList泛型集合物件來建立ListAdapter結合器物件,如下所示: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ArrayList<String> list = new ArrayList<String>(); list.add("2009/07"); list.add("2009/08"); ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); // 指定使用的LisatAdapter }

13-1 顯示圖檔-行動相簿 步驟三:建立分類目錄的ListActivity類別-3 onListItemClick()方法 在onListItemClick()方法回應使用者的選擇,這是使用整數陣列來儲存使用者選取目錄的照片清單,如下所示: @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); int [] imageIds = null; switch(position) { case 0: imageIds = new int[6]; imageIds[0] = R.drawable.image01; imageIds[1] = R.drawable.image02;

13-1 顯示圖檔-行動相簿 步驟三:建立分類目錄的ListActivity類別-4 imageIds[2] = R.drawable.image03; imageIds[3] = R.drawable.image04; break; case 1: imageIds = new int[5]; imageIds[0] = R.drawable.image05; imageIds[1] = R.drawable.image06; imageIds[2] = R.drawable.image07; }

13-1 顯示圖檔-行動相簿 步驟三:建立分類目錄的ListActivity類別-5 然後建立Intent物件啟動MyGallery活動,並且傳遞照片資源陣列的附件,如下所示: Intent intent = new Intent(Ch13_1Activity.this, MyGallery.class); intent.putExtra("IMAGEIDS", imageIds); startActivity(intent); }

13-1 顯示圖檔-行動相簿 步驟四:相簿的版面配置Gallery元件 在MyGallery活動的版面配置檔是mygallery.xml,使用Gallery介面元件瀏覽選取目錄下的所有照片,它是以橫向水平捲軸方式來顯示照片縮圖,在之下是ImageView元件,如下所示: <Gallery android:id="@+id/gallery1" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <ImageView android:id="@+id/image1" android:layout_width="320px" android:layout_height="250px" android:scaleType="fitXY" />

13-1 顯示圖檔-行動相簿 步驟五:建立顯示行動相簿的MyGallery活動-1 行動相簿的照片主要是在MyGallery活動類別顯示,在類別宣告開頭是成員的ImageView物件變數和imageIDs[]陣列,如下所示: public class MyGallery extends Activity { private ImageView imageview; private int[] imageIDs = null; … }

13-1 顯示圖檔-行動相簿 步驟五:建立顯示行動相簿的MyGallery活動-2 onCreate()方法 在覆寫的onCreate()方法首先取得Intent物件傳入的圖形陣列imageIDs[],如下所示: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mygallery); Intent intent = getIntent(); imageIDs = intent.getIntArrayExtra("IMAGEIDS"); imageview = (ImageView)findViewById(R.id.image1); imageview.setImageResource(imageIDs[0]);

13-1 顯示圖檔-行動相簿 步驟五:建立顯示行動相簿的MyGallery活動-3 程式碼取得ImageView物件後,指定Gallery元件使用的結合器物件,和建立選取縮圖的事件處理,如下所示: Gallery gallery = (Gallery)findViewById(R.id.gallery1); gallery.setAdapter(new ImageAdapter(this)); gallery.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { imageview.setImageResource( imageIDs[position]); } public void onNothingSelected(AdapterView<?> arg0) { });

13-1 顯示圖檔-行動相簿 步驟五:建立顯示行動相簿的MyGallery活動-4 內層類別ImageAdapter ImageAdapter內層類別是繼承BaseAdapter的自訂結合器類別,需要覆寫getCount()、getItem()、getItemId()和getView()方法,如下所示: public class ImageAdapter extends BaseAdapter { private Context context; private int itemBackground; public ImageAdapter(Context c) { context = c; TypedArray a = obtainStyledAttributes( R.styleable.Gallery1); itemBackground = a.getResourceId(R.styleable. Gallery1_android_galleryItemBackground, 0); a.recycle(); }

13-1 顯示圖檔-行動相簿 步驟五:建立顯示行動相簿的MyGallery活動-5 @Override public int getCount() { return imageIDs.length; } public Object getItem(int position) { return position; public long getItemId(int position) {

13-1 顯示圖檔-行動相簿 步驟五:建立顯示行動相簿的MyGallery活動-6 @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(context); imageView.setImageResource(imageIDs[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams( new Gallery.LayoutParams(150, 120)); imageView.setBackgroundResource(itemBackground); return imageView; }

13-1 顯示圖檔-行動相簿 步驟六:在AndroidManifest.xml註冊活動 MyGallery活動需要在AndroidManifest.xml檔註冊,如下所示: <activity android:name=".MyGallery"/>

13-2 音樂播放-音樂播放器(說明) Android應用程式可以使用MediaPlayer物件播放音樂,為了不中斷音樂的播放,專案是建立服務來播放儲存在SD卡的MP3音樂,即Windows作業系統範例音樂Kalimba.mp3。

13-2 音樂播放-音樂播放器 步驟一:開啟和執行Android專案 請啟動Eclipse IDE開啟Android專案Ch13_2,內含2個Java類別檔的活動與服務和版面配置檔main.xml。首先需要將MP3音樂檔複製至Android模擬器的SD卡後執行此專案,其執行結果如下圖所示:

13-2 音樂播放-音樂播放器 步驟二:建立播放器介面的版面配置 <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="開始/繼續" android:onClick="start_Click"/> <Button android:id="@+id/pause" android:text="暫停" android:onClick="pause_Click"/> <Button android:id="@+id/stop" android:text="停止" android:onClick="stop_Click"/> </LinearLayout>

13-2 音樂播放-音樂播放器 步驟三:建立Activity活動類別的事件處理方法-1 在Ch13_2Activity活動類別的開頭宣告成員的TextView物件變數,如下所示: public class Ch13_2Activity extends Activity { private TextView output; … }

13-2 音樂播放-音樂播放器 步驟三:建立Activity活動類別的事件處理方法-2 onCreate()方法 在覆寫的onCreate()方法顯示播放器介面的版面配置和取得TextView元件,如下所示: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); output = (TextView) findViewById(R.id.output); }

13-2 音樂播放-音樂播放器 步驟三:建立Activity活動類別的事件處理方法-3 start_Click()事件處理方法 在start_Click()方法使用Intent物件呼叫startService()方法來啟動MusicService服務,附件ISPAUSE是布林值false,表示不是暫停播放,如下所示: public void start_Click(View view) { Intent intent = new Intent(this, MusicService.class); intent.putExtra("ISPAUSE", false); startService(intent); output.setText("音樂播放中..."); }

13-2 音樂播放-音樂播放器 步驟三:建立Activity活動類別的事件處理方法-4 pause_Click()事件處理方法 在pause_Click()方法也是使用Intent物件呼叫startService()方法來啟動MusicService服務,如下所示: public void pause_Click(View view) { Intent intent = new Intent(this, MusicService.class); intent.putExtra("ISPAUSE", true); startService(intent); output.setText("音樂暫停中..."); }

13-2 音樂播放-音樂播放器 步驟三:建立Activity活動類別的事件處理方法-5 stop_Click()事件處理方法 在stop_Click()方法是使用Intent物件呼叫stopService()方法來停止服務,也就是停止音樂的播放,如下所示: public void stop_Click(View view) { Intent intent = new Intent(this, MusicService.class); stopService(intent); output.setText("音樂已經停止播放..."); }

13-2 音樂播放-音樂播放器 步驟四:建立MusicService服務類別播放音樂-1 播放音樂是在MusicService服務類別,使用MediaPlayer物件的相關方法來播放音樂。類別是繼承自Service類別,在開頭宣告成員的MediaPlayer物件,如下所示: public class MusicService extends Service { private MediaPlayer player; private String musicFile = "/sdcard/Kalimba.mp3"; ...... }

13-2 音樂播放-音樂播放器 步驟四:建立MusicService服務類別播放音樂-2 onCreate()方法 在覆寫onCreate()方法建立MediaPlayer物件,try/catch例外處理使用setDataSource()方法指定音樂檔案路徑,setOnCompletionListener()方法指定播放完畢的傾聽者物件,最後呼叫prepare()方法進入準備狀態,如下所示: @Override public void onCreate() { player = new MediaPlayer(); try { player.setDataSource(musicFile); player.setOnCompletionListener(listener); player.prepare(); // 準備 } catch (Exception ex) { Log.d("Ch13_2", "onCreate: " + ex.getMessage()); }

13-2 音樂播放-音樂播放器 步驟四:建立MusicService服務類別播放音樂-3 OnCompletionListener傾聽者物件 使用匿名內層類別建立OnCompletionListener傾聽者物件,類別需要覆寫onCompletion()方法,如下所示: private OnCompletionListener listener = new OnCompletionListener() { @Override public void onCompletion(MediaPlayer nouse) { try { player.stop(); // 停止 player.prepare(); // 準備 } catch (Exception ex){ Log.d("Ch13_2", "Listener: " + ex.getMessage()); } };

13-2 音樂播放-音樂播放器 步驟四:建立MusicService服務類別播放音樂-4 onStartCommand()方法 @Override public int onStartCommand(Intent intent, int flags, int startId) { Boolean isPause = intent.getBooleanExtra("ISPAUSE", true); try { if (isPause == true) { if (player.isPlaying() == true) player.pause(); // 暫停 } else { player.start(); // 播放 } } catch (Exception ex) { Log.d("Ch13_2", "onStart(): " + ex.getMessage()); return START_STICKY;

13-2 音樂播放-音樂播放器 步驟四:建立MusicService服務類別播放音樂-5 onDestroy()方法 在覆寫的onDestroy()方法是呼叫stop()方法停止音樂播放,如下所示: @Override public void onDestroy() { try { player.stop(); // 停止 player.prepare(); // 準備 } catch (Exception ex) { Log.d("Ch13_2", "onDestroy(): " + ex.getMessage()); }

13-2 音樂播放-音樂播放器 步驟四:建立MusicService服務類別播放音樂-6 onBind()抽象方法 實作的onBind()抽象方法並沒有使用,所以傳回null,如下所示: @Override public IBinder onBind(Intent intent) { return null; }

13-2 音樂播放-音樂播放器 步驟五:在AndroidManifest.xml註冊服務 MusicService服務需要在AndroidManifest.xml檔註冊,如下所示: <service android:name=".MusicService"/>

13-3 影片播放-視訊播放器(說明) 在Android應用程式播放影片也可以使用MediaPlayer,不過,我們需要建立Surface物件繪出影片內容,在第16-3節使用相機時,就會使用此方式來動態顯示從相機硬體取得的預覽串流畫面。 另一種比較簡單的方式是使用VideoView元件和MediaController物件來控制影片播放,換句話說,我們可以輕鬆在活動類別建立一個視訊播放器程式。

13-3 影片播放-視訊播放器 步驟一:開啟和執行Android專案 請啟動Eclipse IDE開啟Android專案Ch13_3,內含1個Java類別檔的活動和一個版面配置檔main.xml。首先需要將影片檔複製至Android模擬器的SD卡來播放影片,其執行結果如右圖所示:

13-3 影片播放-視訊播放器 步驟二:建立版面配置的VideoView元件 視訊播放器的使用介面是定義在main.xml版面配置檔,主要就是VideoView元件,如下所示: <VideoView android:id="@+id/video1" android:layout_width="320px" android:layout_height="240px"/>

13-3 影片播放-視訊播放器 步驟三:建立Activity活動類別播放影片-1 在Ch13_3Activity活動類別的開頭宣告成員的VideoView物件變數,如下所示: public class Ch13_3Activity extends Activity { private VideoView video; private String videoFile = "sample.3gp"; … }

13-3 影片播放-視訊播放器 步驟三:建立Activity活動類別播放影片-2 onCreate()方法 在覆寫的onCreate()方法顯示VideoView元件的版面配置後,就可以取得VideoView物件和呼叫相關方法來播放影片,如下所示: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); video = (VideoView)findViewById(R.id.video1); video.setVideoURI( Uri.parse("file:///sdcard/"+ videoFile)); video.setMediaController(new MediaController(this)); video.start(); }

13-3 影片播放-視訊播放器 步驟三:建立Activity活動類別播放影片-3 onPause()方法 在覆寫的onPause()方法是呼叫stopPlayback()方法停止影片的播放,如下所示: @Override public void onPause() { super.onStop(); video.stopPlayback(); }

13-4 聲音處理-錄音程式(說明) 一般來說,行動裝置的麥克風除了通話外,我們也可以建立錄音程式,使用麥克風裝置來錄製聲音,在Android是使用MediaRecorder物件來錄音和將它存入檔案。 MediaRecorder物件在使用上只需指定錄音格式和儲存檔案的路徑,就可以開始進行聲音錄製。

13-4 聲音處理-錄音程式 步驟一:開啟和執行Android專案 請啟動Eclipse IDE開啟Android專案Ch13_4,內含1個Java類別檔、一個版面配置檔main.xml。因為Android模擬器支援錄音部分有些問題,建議使用實機來測試,其執行結果如下圖所示:

13-4 聲音處理-錄音程式 步驟二:建立錄音程式的版面配置 <TextView android:id="@+id/output" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"/> <Button android:id="@+id/start" android:text="開始錄音" android:onClick="start_Click" android:enabled="false"/> <Button android:id="@+id/stop" android:text="停止錄音" android:onClick="stop_Click"

13-4 聲音處理-錄音程式 步驟三:建立Activity活動類別的事件處理方法-1 在Ch13_4Activity活動類別的開頭宣告成員的MediaRecorder、Button、TextView和File物件變數,如下所示: public class Ch13_4Activity extends Activity { private MediaRecorder recorder; private Button start, stop; private TextView output; File path; … }

13-4 聲音處理-錄音程式 步驟三:建立Activity活動類別的事件處理方法-2 onCreate()方法 在覆寫的onCreate()方法建立MediaRecorder物件和錄音檔路徑的File物件,如下所示: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); output = (TextView) findViewById(R.id.output); recorder = new MediaRecorder(); path = new File(Environment. getExternalStorageDirectory(), "myrecord.3gp"); resetRecorder(); }

13-4 聲音處理-錄音程式 步驟三:建立Activity活動類別的事件處理方法-3 onDestroy()方法 在覆寫的onDestroy()方法呼叫release()方法釋放MediaRecorder物件的資源,如下所示: @Override protected void onDestroy() { super.onDestroy(); recorder.release(); }

13-4 聲音處理-錄音程式 步驟三:建立Activity活動類別的事件處理方法-4 resetRecorder()方法 在自訂的resetRecorder()方法重設錄音機的MediaRecorder物件,如下所示: private void resetRecorder() { recorder.setAudioSource( MediaRecorder.AudioSource.MIC); recorder.setOutputFormat( MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder( MediaRecorder.AudioEncoder.DEFAULT); recorder.setOutputFile(path.getAbsolutePath()); try { recorder.prepare(); output.setText("錄音程序準備完成...."); start.setEnabled(true); } catch (Exception ex) { Log.d("Ch13_4", "resetRecorder: " + ex.getMessage()); }

13-4 聲音處理-錄音程式 步驟三:建立Activity活動類別的事件處理方法-5 start_Click()事件處理方法 在start_Click()方法呼叫MediaRecorder物件的start()方法開始錄音,然後使用setEnabled()方法設定按鈕狀態是否可用,因為已經開始錄音,所以將【停止錄音】鈕設為可用,可以按下此按鈕來結束錄音,如下所示: public void start_Click(View view) { output.setText("開始錄音...."); try { recorder.start(); start.setEnabled(false); stop.setEnabled(true); } catch (Exception ex) { Log.d("Ch13_4", "start_Click " + ex.getMessage()); }

13-4 聲音處理-錄音程式 步驟三:建立Activity活動類別的事件處理方法-6 stop_Click()事件處理方法 在stop_Click()方法呼叫MediaRecorder物件的stop()方法停止錄音,如下所示: public void stop_Click(View view) { output.setText("停止錄音...."); recorder.stop(); start.setEnabled(true); stop.setEnabled(false); }

13-4 聲音處理-錄音程式 步驟四:在AndroidManifest.xml新增錄音權限 錄音程式因為執行錄音和在外部儲存裝置寫入檔案,所以在AndroidManifest.xml檔需要新增RECORD_AUDIO和WRITE_EXTERNAL_STORAGE權限,如下所示: <uses-permission android:name= "android.permission.RECORD_AUDIO"/> "android.permission.WRITE_EXTERNAL_STORAGE"/>

13-5 2D繪圖-井字遊戲 13-5-1 2D繪圖的基礎 13-5-2 井字遊戲

13-5-1 2D繪圖的基礎-說明 Android支援2D繪圖,可以在繼承View類別覆寫的onDraw()方法繪圖,如下所示: public class Draw2D extends View { public Draw2D(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { // 在此繪圖

13-5-1 2D繪圖的基礎-建立畫布 在繪圖前,我們需要先建立畫筆的Paint物件,如下所示: Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); 上述setStyle()方法指定畫筆的樣式,然後將整個Canvas物件填滿白色的背景色彩,如下所示: paint.setColor(Color.WHITE); canvas.drawPaint(paint);

13-5-1 2D繪圖的基礎-畫圓 在畫布畫圓是使用Canvas物件的drawCircle()方法,首先使用setAntiAlias()方法指定畫筆線條沒有鋸齒狀,和色彩為紅色,如下所示: paint.setAntiAlias(true); paint.setColor(Color.RED); canvas.drawCircle(80, 30, 25, paint);

13-5-1 2D繪圖的基礎-畫長方形 畫長方形是使用drawRect(),參數為兩組(x, y),分別是左上角和右下角座標,畫筆是藍色,如下所示: paint.setColor(Color.BLUE); canvas.drawRect(20, 15, 50, 100, paint);

13-5-1 2D繪圖的基礎-畫出資源圖形 在畫布上也可以直接繪出圖形資源的圖檔,首先取得資源的Resources物件,如下所示: Resources res = this.getResources(); Bitmap bitmap = BitmapFactory.decodeResource( res, R.drawable.icon); canvas.drawBitmap(bitmap, 50 ,200 , paint);

13-5-1 2D繪圖的基礎-畫出文字內容 在畫布上也可以畫出一段文字內容,首先指定畫筆的色彩、樣式、線條和字型尺寸,如下所示: paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.FILL); paint.setAntiAlias(true); paint.setTextSize(30); 上述setTextSize()方法指定字型尺寸,然後呼叫drawText()方法畫出一段文字內容,如下所示: canvas.drawText("我的畫布!", 50, 180, paint);

13-5-1 2D繪圖的基礎-畫出旋轉文字 我們還可以在畫布上繪出一段旋轉文字。首先指定畫筆色彩、字型尺寸和繪出的字串,如下所示: paint.setColor(Color.BLACK); paint.setTextSize(25); String str = "旋轉的文字!"; canvas.rotate(-45, 200, 200); paint.setStyle(Paint.Style.FILL); canvas.drawText(str, 200, 200, paint); 取消旋轉是呼叫restore()方法,如下所示: canvas.restore();

13-5-2 井字遊戲-說明 井字遊戲是2D繪圖的應用,筆者使用2D繪圖方法來繪出井字形的遊戲板和在指定儲存格繪出O和X的圖形。

13-5-2 井字遊戲-步驟 步驟一:開啟和執行Android專案 步驟二:建立Activity活動執行井字遊戲 步驟三:建立井字形遊戲板的MainBoard類別 步驟四:建立邏輯儲存格的CellBoard類別

End