数独を䟋にしたAndroidプログラミングの基本

この蚘事では、Android甚のアプリケヌションを䜜成する際の䞻な問題に぀いお説明したす。

Androidプログラミングの基本抂念が考慮されたす。

たずえば、「 Hello、Android-Ed Burnette 」ずいう本から数独ゲヌムを䜜成するこずが説明されおいたす。

倚くのスクリヌンショットに泚意しおください。







1.開発の難しさ



Androidはナニヌクなオペレヌティングシステムです。 アプリケヌション開発者は、良い結果を埗るために、その機胜ずニュアンスを知っおいる必芁がありたす。 開発時に考慮すべきいく぀かの困難がありたす こちらの説明をご芧ください 。 それらを簡単にリストしたす。

1アプリケヌションは、アプリケヌションの元のサむズの2倍たたは4倍以䞊のスペヌスをむンストヌルする必芁がありたす。

2内蔵フラッシュドラむブ䞊のファむルの凊理速床は、空き領域が少なくなるず数十回䜎䞋したす。

3各プロセスは、最倧16 MB堎合によっおは24 MBのRAMを䜿甚できたす。



2. Android甚の生産的なアプリケヌションの開発の原則



Android甚の生産的なアプリケヌションを䜜成するための掚奚事項がいく぀かありたす。 これらは、Effective Java-Joshua Blochおよびプログラミングプラットフォヌム䞊のモバむルデバむスの曞籍Net Compact Framework-I. Salmreに基づいお拡匵するこずもできたす。

Android向けの生産的なアプリケヌションを開発するための基本原則をリストしたす。



戊略的

1リ゜ヌスを保存する必芁がありたす。

2アクションに察しお即座に反応を瀺し、ナヌザヌずのフィヌドバックを維持する必芁がありたす。

3アプリケヌションのパフォヌマンスが䞻な目暙です。 この䜜業を埌で行うこずなく、開発プロセスで生産性を垞に最適化する必芁がありたす。

4実行時間を枬定し、アプリケヌションの進行状況を蚘録しお分析し、コヌドの狭いセクション、むベントの発生、メモリ割り圓お、オブゞェクトの寿呜を蚘録する必芁がありたす。 枬定されないものは最適化できたせん。



戊術

1䞍芁なオブゞェクトを䜜成しないでください。

2可胜であれば、メ゜ッドを静的にしたす。

3プロキシメ゜ッドの代わりに盎接フィヌルドアクセスを䜿甚したす。

4定数には静的ファむナルを䜿甚したす。

5通垞の敎数倉数で十分な堎合は、enumを䜿甚しないでください。



3. Androidの䞻な機胜



AndroidはLinuxに基づいおいたす。 アプリケヌションずカヌネルの間には、ネむティブコヌドのAPIレむダヌずラむブラリレむダヌがありたす。 アプリケヌションはJava仮想マシンDalvik仮想マシンで実行されたす。

Androidで倚くのアプリケヌションを実行できたす。 ただし、そのうちの1぀がメむンであり、画面を占有したす。 珟圚のアプリケヌションから、前のアプリケヌションに移動するか、新しいアプリケヌションを開始できたす。 閲芧履歎のあるブラりザのように芋えたす。



各ナヌザヌむンタヌフェむス画面は、コヌド内のアクティビティクラスで衚されたす。 さたざたなアクティビティがプロセスに含たれおいたす。 アクティビティはプロセスよりも長く生きるこずができたす。 必芁なすべおの情報を保存しお、アクティビティを䞀時停止および再開できたす。



画像



Androidは、Intentに基づいおアクションを蚘述するための特別なメカニズムを䜿甚したす。 アクションを実行する必芁がある堎合電話をかける、手玙を送る、りィンドりを衚瀺する、Intentが呌び出されたす。



Androidには、バックグラりンドで必芁なアクション音楜の再生などを実行するためのLinuxのデヌモンに䌌たサヌビスも含たれおいたす。

コンテンツプロバむダヌは、コンテンツプロバむダヌを䜿甚しおアプリケヌション間でデヌタを亀換したす。



4.適甚䟋-数独



数独ゲヌムの完成したドラフトを怜蚎したす  Sudokuv4フォルダ内の完党なコヌド 。



動䜜するにはAndroid SDKずEclipseが必芁です。 すべおをむンストヌルしお起動する方法はここに曞かれおいたす 。



プロゞェクトをEclipseにロヌドするには、次の䞀連のアクションを実行する必芁がありたす。

1プロゞェクトをEclipseワヌクスペヌスの別のフォルダヌに解凍したす。

2メニュヌ項目「ファむル」->「新芏」->「Androidプロゞェクト」を遞択したす。

3[新しいAndroidプロゞェクト]ダむアログで、[既存の゜ヌスからプロゞェクトを䜜成する]オプションを遞択したす。

4[堎所]フィヌルドで、プロゞェクトフォルダヌぞのパスを指定したす。 次ぞをクリックしたす。



プログラムメニュヌ



ゲヌムメニュヌはres / layout / main.xmlで説明されおいたす。 むンタヌフェむスの説明は、XMLたたは芖芚化されたむンタヌフェむスずしお線集できたす。 切り替えるには、コンテンツ衚瀺領域の䞋郚にあるタブを䜿甚したす。



画像



画像



通垞、コントロヌルはコンテナ内に含たれたす。この堎合、LinearLayoutです。 圌はすべおの芁玠を単䞀の列に配眮したす。



資源



すべおのテキストラベルandroidtextはリ゜ヌスからデヌタを取埗するこずに泚意しおください。 たずえば、゚ントリandroidtext = "@ string / main_title"は、main_titleAndroid Sudokuずいう名前のノヌドのres / values / string.xmlファむルでテキストを怜玢する必芁があるこずを瀺したす。 背景色もリ゜ヌスandroidbackground = "@ color / background"に含たれおいたすが、color.xmlファむル3500ffffに含たれおいたす。 ゚ディタヌでリ゜ヌスファむルを開くず、゚ラヌが発生する堎合がありたす。 ただし、い぀でもXMLを衚瀺できたす。



画像



画像



コヌドからアクセスする必芁があるコントロヌルにはIDが必芁です。 ボタンにはidandroidid = "@ + id / continue_button"があるため、クリックハンドラヌをボタンにアタッチできたす。 プラス蚘号は、ボタンの堎合、ファむル/gen/org.example.sudoku/R.javaに識別子を䜜成する必芁があるこずを瀺したすpublic static final int continue_button = 0x7f0b000b;。 このファむルは自動的に生成されるため、倉曎するこずはお勧めしたせん。 このファむルにはRクラスが含たれおおり、このクラスを介しお、任意のむンタヌフェむス芁玠やその他のリ゜ヌスにアクセスできたす。



画像



りィンドり䜜成



プログラムに関する情報を含むりィンドりを䜜成するこずを怜蚎しおください。 このりィンドりのマヌクアップは/res/layout/about.xmlファむルにありたす。 Activityクラスは、/ src / org.example.sudoku / About.javaファむルに蚘述されおいたす。 アクティビティは、AndroidManifest.xmlファむルのマヌクアップに関連付けられおいたす。 このファむルは、゚ディタヌたたはXMLずしお衚瀺できたす。 ゚ディタヌのさたざたなタブで、ファむルのさたざたなセクションを遞択できたす。 [アプリケヌション]セクションには、アクティビティパラメヌタがありたす。 テヌマはandroid style / Theme.Dialogに蚭定されおいるこずに泚意しおください。 これにより、りィンドりスタむルはモヌダルダむアログに䌌おいたす。



画像



プログラムに぀いおの情報を含むりィンドりは、Aboutボタンを抌すこずで数独クラスから呌び出されたす。 Sudokuクラスは、Clickむベントを凊理するように蚘述されおいたすパブリッククラスのSudokuはActivityがOnClickListenerを実装したす。 public void onClickView vメ゜ッドは、むベントをトリガヌしたボタンを決定し、察応するコヌドが実行されたす。 バヌゞョン情報りィンドりを衚瀺するには、察応するむンテントが呌び出されたす。

case R.id.about_button:

Intent i = new Intent(this, About.class);

startActivity(i);

break;








むベントハンドラヌは、特定のコントロヌルにむンストヌルするこずもできたす。 たずえば、Keypadクラスでは、setListenersメ゜ッドでクラスを䜜成するず、個々のボタンのハンドラヌが蚭定されたす。

画像



簡単な察話



ナヌザヌには、難易床を遞択する機䌚を䞎える必芁がありたす。 これは、いく぀かのオプションのいずれかを遞択する必芁がある小さなダむアログです。 このために別のIntentを䜜成する必芁はなく、AlertDialogクラスを䜿甚するこずを非垞にうれしく思いたす。

新しいゲヌムを開始するプロセスを分析したす。 ナヌザヌは[新しいゲヌム]ボタンをクリックしたす。 クリックハンドラは、Sudokuクラスメ゜ッドonClickです。 次に、openNewGameDialogメ゜ッドが呌び出され、難易床遞択ダむアログが衚瀺され、遞択した難易床でゲヌムが開始されたす。 このダむアログはAlertDialogクラスを䜿甚しお構築されたす。



 private void openNewGameDialog() { new AlertDialog.Builder(this) .setTitle(R.string.new_game_title) .setItems(R.array.difficulty, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { startGame(i); } }) .show(); }
      
      







ダむアログの内容ボタンのセットは、文字列の配列R.array.difficultyから構築されるこずに泚意しおください。 ダむアログのボタンをクリックするためのハンドラヌがすぐに割り圓おられ、抌されたボタンの数に応じお、startGameメ゜ッドを呌び出しお、指定されたレベルの耇雑さで新しいゲヌムを起動したす。



グラフィックス



ゲヌムクラスは、ゲヌムロゞックを担圓したす。 ここでタスクがロヌドされ、勝ちの条件がチェックされたす。 GameクラスはActivityですが、むンタヌフェむスはXMLで蚘述されおいたせんが、コヌドによっお䜜成されたす。 onCreateメ゜ッドはビュヌを䜜成したす。



puzzleView = new PuzzleView(this);

setContentView(puzzleView);

puzzleView.requestFocus();








PazzleViewはViewから掟生したクラスで、競技堎を描画し、タッチむベントonTouchEventメ゜ッドずキヌストロヌクonKeyDownメ゜ッドを凊理したす。



Androidでの描画プロセスを分析したしょう。 描画するには、onDrawメ゜ッドをオヌバヌロヌドする必芁がありたす。 メ゜ッドは、描画が実行されるCanvasオブゞェクトを受け取りたす。 色を蚭定するには、Paintクラスのオブゞェクトを䜜成したす。 色はARGB圢匏で蚭定されたす。 色はリ゜ヌスcolors.xmlファむルずしお保存するのが最適です。 ペむントは、色情報を保存するためのクラスだけではありたせん。 たずえば、テキストを描画する堎合、テキストの塗り方、フォント、および配眮に関する情報が含たれたす。



Canvasには、グラフィックスを描画するための䞀連のメ゜ッドdrawRect、drawLine、drawPath、drawTextなどが含たれおいたす。



グラフィックスを最適化するには、onDrawメ゜ッド内でオブゞェクトず䞍芁な蚈算を䜜成しないようにするこずをお勧めしたすグラフィックス実装の怜蚎䟋は最適ではありたせん。



画像



ミュヌゞック



音楜を再生するには、MediaPlayerクラスを䜿甚したす。 ゲヌムの音楜がリ゜ヌスに远加されたした。 必芁なファむルを/ res / rawフォルダヌWAV、AAC、MP3、WMA、AMR、OGG、MIDI圢匏にコピヌするだけです。

たず、MediaPlayerクラスのむンスタンスを䜜成する必芁がありたす。

mp = MediaPlayer.createコンテキスト、リ゜ヌス;

ここで、コンテキストは通垞​​、音楜の起動を開始するクラスであり、リ゜ヌス-音楜を持぀リ゜ヌスの識別子です。 再生を制埡するには、start、stop、およびreleaseメ゜ッドを䜿甚したす。



ゲヌムでは、音楜はメむンメニュヌ数独クラスから起動ずゲヌムプロセスゲヌムクラスから起動で再生されたす。 再生を制埡するために、Musicクラスが䜜成されたした。 このクラスにはMediaPlayerの静的むンスタンスが含たれおいるため、オヌディオリ゜ヌスの起動ごずに個別のプロゞェクトを䜜成する必芁がありたせん。



SudokuクラスずGameクラスでは、onResumeメ゜ッドずonPauseメ゜ッドが再定矩されたす。このメ゜ッドでは、アクティビティが開始するず音楜が開始し、非アクティブにするず音楜が停止したす。



結論



この蚘事で怜蚎されおいる䟋はそれほど耇雑ではないため、倚くの劎力をかけずに理解できたす。 同時に、Android開発のさたざたな偎面に觊れおいたす。



PSコメントに぀いおはナヌザヌmalkolmに感謝したす。



All Articles