このブログについて [androidアプリ開発]
初心者のために書くというより、自分の覚書的に書き綴っていくので、きちんとした解説サイトのように役に立たないかもしれませんが、作者の無謀な挑戦を鼻で笑いつつもナマ暖かく見届けてください。
更新は不定期です。1ヶ月くらい空くようなことがあれば挫折して旅に出てると思ってください。
対象はandroid2.2以降、JAVA-JDK7、eclipse3.7.1です。
コンテンツ [androidアプリ開発]
開発環境作るし!・JAVA入れるよ!
開発環境作るし!・Eclipse入れるよ!
開発環境作るし!・AndroidSDK入れるよ!
androidエミュレーターを設定してみる
Androidでrootを取らずに画面キャプチャする
始まりはいつだってHello world!
Hello droid! 好きな文字列を表示してみる
書き換えたアプリが更新されないときがある
XMLで画面を作成してみる1
基本の基本、クラスとメソッドとオブジェクトの判りにくい関係
XMLで画面を作成してみる2・ついでに画面遷移
XMLで画面を作成してみる2・ついでに画面遷移[androidアプリ開発]
前回作ったsample001を使って画面をいろいろいじってみよう。
新規作成したデフォのプロジェクトのmain.xmlファイルを開く。
パレットからプレーン・テキストを追加してみる。
解説サイトにあるのとなんか違う・・・。
よくよく見ると、プロパティーウインドウに @+id/EditText01の文字が。
SDKのバージョンの違いなのかな?よくわかんない。
ちなみにプロパティーウインドウが出てない人はEclipseの「ウインドウ」-「ビューの表示」で出しておこう。これないとヤバい。
プレーンテキストとボタンを配置して、ためしにビルド。
これだけじゃつまんないので、画面をもう一つ追加して、画面遷移するようにしてみる。画面の遷移は配置したボタンで行う。つまり、ボタンをタップするというアクションイベントを起こすわけだ。
先にボタン名を「subへ移動」としておこう。
おいなんかいきなり高度じゃね?(´・ω・`)
まず、上記の画面がメイン画面なので、遷移先のサブ画面を作成する。
「画面」を表示するにはActivityが必要なので、サブ画面を表示するためのActivityを新しく作成しよう。
とりあえずxmlファイルから用意。
ファイル-新規-AndroidXMLファイルを選ぶ。
プロジェクト名はそのまま、ファイル名はてきとうにsubとしてみた。
次にこの画面。
なにこれ意味不明すぎる。
よくよく読むと画面の書式設定っぽい。
こんな風に設定。
Size:Normal
UI Mode:NotLong
Orientation:Portrait
Density:MediumDensity
TouchScreen:Finger
Keyboard:Soft
TextInput:Qwerty
Navigation Method:Trackball
Dimension:320×480
これで完了。
勝手にディレクトリ作って放り込んでやがるので、後々こんなディレクトリを指定するハメになるのはきついのでlayoutディレクトリに移動させておこう。この変なディレクトリは消しておく。
※作ったばかりのディレクトリやファイルはオープン状態になってるみたいで消せなかったりする。Eclipseを一度終了させると消えます。これバグじゃね?(´・ω・`)
TextViewとボタンを配置してみた。
TextViewの中身はプロパティーウインドウでいじれる。
これ便利だなー。GUIってすばらしい(´・ω・`)
プロパティーウインドウのほうでボタン名を「戻る」とでもしておく。
次に、このsub.xmlを表示するクラスを作成する。画面を持つのでActivityということに。
「ファイル」-「新規」-「クラス」を選択。
おなじみのこのウインドウ。
ソースフォルダーは変更なし。
パッケージは「参照」でいま編集中のパッケージを選択。
名前はクラス名のこと。
とりあえず「subActivity」とした。
でも最初の文字は大文字にするのがマナーみたい。無視して進んだけどエラーはなかった。
次にこのsubActivityの中身をいじって、さっきのsub.xmlを表示するように修正。
package jp.ne.so_net.blog.androp.sample001; import android.app.Activity; import android.os.Bundle; public class subActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); } }
@override以降にonCreateでこのActivityをスタートするようにして、setContentViewで表示するxmlに sub を指定してやる。
これでsubActivity.javaとsub.xmlの紐付けができた。
このままだとメイン画面と関係のない孤立した画面のままなので、
AndroidManifest.xml
というなんだかよくわからないファイルをいじってActivityの管理をするみたい(´・ω・`)
メイン画面のActivityが記述してある次から、
<activity android:name=".subActivity"
android:label="@string/app_name">
</activity>
と記述して「subActivityってのが存在するよ!」 と宣言しておいてやる。
ちなみにソースで貼り付けたかったけどSo-Netブログのウィジグがクソすぎて貼り付かなかった。ソネットマジクソネット(´・ω・`)
続いて、Sample001Activity.javaを編集して、サブ画面へ行くようにボタンクリックのアクションを記述する。
package jp.ne.so_net.blog.androp.sample001; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Sample001Activity extends Activity implements OnClickListener { /** Called when the activity is first created. */ private Button button1; //ボタン変数 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //ボタン変数と、XMLで作ったボタン(button1)を関連付け button1=(Button)findViewById(R.id.button1); //button1のクリックイベントを拾う button1.setOnClickListener(this); } //--------------------------- //ボタンがクリックされたら呼ばれるメソッド //--------------------------- public void onClick(View v) { if(v==button1){ Intent intent = new Intent(this, subActivity.class); startActivity(intent); } } }
まず、 private Button button1; の部分でボタン変数 button1 を定義。
で、button1変数がXMLファイル内のどのパーツのことなのかを定義。
さらに、button1にクリックイベントを設定。
ここまでだとbutton1をクリックした時にどうなるのかが記述されていないので何も起こらない。
なので、button1をクリックしたら呼び出される処理(メソッド)を記述。
インテントとかいうナゾのメソッド?で、subActivityを呼び出して、startActivityでインテントに放り込んだsubAcrivityをスタートし、メインの処理をそっちへ委譲しています。
よくわかんねーや(´・ω・`)
いろいろパーツが足りないみたいな波線エラーが出るので、マウス合わせて適当に入れていく。
setOnClickListener(this);
を使うと下図のエラーが出るので、一番下の「OnClickListenerに実装」っていうのを選んでみた。
そうすると
なんかクラス定義のとこに見知らぬコードが出てきた。
エラー消えたのでまぁいいや(´・ω・`)
実行してみる。
移動した。わーい。
同様に、subActivity.javaの中身もいじって「戻る」ボタンが生きるようにする。
package jp.ne.so_net.blog.androp.sample001; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class subActivity extends Activity implements OnClickListener { private Button button1; //ボタン変数 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); //ボタン変数と、XMLで作ったボタン(button1)を関連付け button1=(Button)findViewById(R.id.button1); //button1のクリックイベントを拾う button1.setOnClickListener(this); } //--------------------------- //ボタンがクリックされたら呼ばれるメソッド //--------------------------- public void onClick(View v) { if(v==button1){ Intent intent = new Intent(this, Sample001Activity.class); startActivity(intent); } } }
メイン画面のSample001Activity.javaとの違いは、クリックで呼び出されるメソッドのところでターゲットクラスをSample001Activityにしているだけ。
これでビルドすると、メイン画面とサブ画面を行ったり来たりするしょうもないアプリができあがり。
画面遷移だけでこんなたいへんなの?死ぬの?(´・ω・`)
基本の基本、クラスとメソッドとオブジェクトの判りにくい関係[androidアプリ開発]
ちょっと間が開いてしまいました。
これというのも全部モンハンのせいです(´・ω・`)
さて、今回はXMLで画面を作成するの第2回をやる前に、もうちょっとJavaの基本を見ていくことに。
画面作る前にプロジェクトのパッケージ構造を整理しだしたらなんだかどんどん画面作成から脱線してきた気もするけど。
前回のおさらい
strings.xml内で文字列変数”hello”と”app_name”に定義した文字列を
main.xmlで配置してアプリ名.javaで表示
っていうのが判ったので、次は実際に表示している部分を見てみることに。
public class Sample001Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
おなじみ、Androidプロジェクトを作成するとできるデフォルトのプロジェクトのjava。
@Overrideって?
「オーバーライドとはスーパークラスにおいて定義されているインスタンスメソッドを、サブクラス内で再定義することを言います。スーパークラスのメソッドを変更することはできないが、サブクラスに特化した機能を付与する必要がある場合などに使用します。」
って説明が書いてあった。
何言ってんのかさっぱりわかんねーよ!(´・ω・`)
スーパークラスは元になった親のクラスのことで、それを継承して新たに追加機能を付加したりするクラスを定義するのをオーバーライド(上書き)と呼ぶみたい。
上のソースでいうとSample001Activityクラスが親になるのかな?
onCreateはActivityが始まると最初に呼び出されるメソッド。すべてのクラスはこれにオーバーライドして進行していく。
ちなみにメソッドは「手続き」や「方法」のことらしい。そしてクラスは「設計図」とかよく言われるけどなんとなく判るようで判らないような(´・ω・`)
onCreateメソッドをオーバーライドする場合には、必ずスーパークラスのメソッドを呼び出す必要があるらしいので、
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
この部分はもう決まり文句みたいなもんだと覚えるしかない。
で、onCreateにsetContentViewを上書きしてmain.xmlの内容を表示しているということに。
うーん、判ったような判らないような、むしろぜんぜんワケが判らないよ(´・ω・`)
もっと親しみやすい、たとえば万人向けのエロワードに置き換えるとかしてみるとどうなるかな。
まずActivityは女の子。ビッチな。
「女の子」に「おっぱい」を実装したいので、新規で「おっぱいクラス」を定義(オーバーライド)。ここにはとうぜんカップサイズという「変数」が入ってる。そしてもちろん、「もむ」というメソッドも。
おいもうダメな予感しかしないぞ(´・ω・`)
カップサイズはいっぱいあるけど、BカップにしたいのでBを呼び出す。Bカップの揉み応えも「おっぱいクラス」には用意されている。なんて便利なクラスなの。
これで「Bカップの女の子」ができた。これがオブジェクト。
ということで、Bカップの女の子Activityちゃんが誕生。
javaの解説してるサイトは星の数ほどあるだろうけど、クラスを「おっぱい」にしたバカはきっとウチだけだと思う(´・ω・`)
一連の動作は、Activityが女性、クラスが男性として見てみるとわかりやすい気がした。
Activityちゃんは男をとっかえひっかえするビッチだけど、二股かけたりといった同時進行することはなくて、いちおう上書きで一人の男を乗り換えていく感じ。Activityマジでビッチ。
このエントリは読まなくてもいい気がするくらいバカなエントリ(´・ω・`)
XMLで画面を作成してみる1[androidアプリ開発]
やっと開発環境が安定しました。ほんと苦労しました。
さて、気を取り直してプログラムの勉強するです(´・ω・`)
前回はLinearLayoutを使用して画面を適当に作ってみました。
LinearLayoutクラスは画面の全体をおおまかに作るようなクラスで、たとえばcssで言うなら、よくやるやり方のwrapで横幅とかボックスカラーを定義して、背景色を指定したbodyの中に置いて、そん中でside-leftやcontenerとか配置するようなキブン。
cssわからないと意味不明ですが。
たぶんそんな位置づけな感じする。
Androidアプリ開発の現場では、XMLで画面を設計して、LinearLayoutで並べていくのが一番オーソドックスで正しいやり方っぽいので、今回はそれをちょっとやってみます。
ちなみにXMLっていうのは何かというと、好き勝手なタグ使えるCSVファイルみたいなもんです。ボクはweb屋だけどデザインメインなのでまず使う機会がなくて、そんな適当な認識してます(´・ω・`)
まずいつもどおりおもむろにAndroidプロジェクトを作成。
パッケージエクスプローラーで中身を覗いてみる。いやエロじゃなくて。
resフォルダはリソースフォルダのことで、構成要素を入れる場所らしい。
ここのLayoutフォルダを見てみると、main.xmlというファイルがあるので開いてみる。
こんなとこに「Hello World,アプリ名!」がいやがりました。
新規でAndroidプロジェクトを作成すると、デフォルトでこのHello World+アプリ名を表示するプロジェクトができるようになってるっぽい。
この部分のコードは
android:text="@string/hello"
と記述してある。
むぅ、「Hello World,アプリ名!」の記述はいったいどこに?
stringは文字列に関するものだと思われ、helloという変数?を呼び出してるんじゃ?
さらに見ていくとresフォルダ内にvalueというフォルダを発見。
その中に
strings.xmlがありました。
コイツの中身は
<?xml version="1.0" encoding="utf-8"?>
<resources><string name="hello">Hello World, Sample001Activity!</string>
<string name="app_name">Sample001</string></resources>
こんな感じ。
やっとナゾが解けた。つまりこのプロジェクトは、
strings.xml内で文字列変数”hello”と”app_name”に定義した文字列を
main.xmlで配置して
アプリ名.javaで表示しているというわけか。
ちょっと文字列出すだけでこんなめんどいの。なにこれ軽くへこむ(´・ω・`)
ためしに
<string name="hello">Hello World, Sample001Activity!</string>
を
<string name="hello">こんにちわ</string>
にしてみた。2byte文字を直で扱えるのか実験。
あっさり表示。
大昔MSXのCで2byte文字を出すのにどれだけ苦労したことか・・・(´・ω・`)
ちなみにapp_nameはアプリケーション名としてデフォルトで定義されていて変更してはいけない要素みたい。
長くなりそうな予感がかなりするので続きは次回へ(´・ω・`)
64bit版eclipse3.7.1のインストールと日本語化の注意点[androidアプリ開発]
エミュレータの挙動がおかしかったのでJavaからぜんぶ再インストールしました(´・ω・`)
これにほぼ一日費やして、いろいろわかった注意点を書き記しておきます。
Windows7@64bit環境です。
・eclipseとJavaのアンインストール
evlipseはフォルダごと削除。
Javaはブラウザにくっついてるので、ブラウザの「ツール」-「アドオン管理」でJavaを停止させてから、コンパネの「プログラムと機能」で削除。
・JDKのインストール
ORACLEのページ(http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html)でWindows x64のJDKをDLしてインストール。
・JREのインストール
JREはエンドユーザー用のランタイムで、開発者用パックのJDKには内包されているのでインストールする必要がない。というwebの書き込みがあちこちにあったけど、
http://java.com/ja/download/installed.jsp?detect=jre&try=1
ここでJavaの有無を調べるとJDKが入っているのに「Javaが入っていない」と言われた。
どうもブラウザのアドオンとしては認識できていないみたい。ということでエンドユーザー向けのランタイムも入れておくことに。http://java.com/ja/download/manual.jsp
※ブラウザが32bit、64bitとある場合(IE)、両方入れたほうがいいみたい
ここまでで、「プログラムと機能」一覧にはJavaなんちゃら~っていうのが5つくらい入るはず。
JavaFXは64bit版を入れると勝手に入る。
・eclipseのインストール
http://www.eclipse.org/downloads/
ここで、Eclipse IDE for Java EE Developersの64bit版をDL。
google先生公式ドキュメントではclassicを奨励してるけど、入ってないpluginがかなりあるし、どうせあとから入れることになるならパッケージが充実してるEE版を。
DLしたファイルを解凍するとeclipseフォルダができる。
ここで超注意事項(´・ω・`)
eclipseフォルダは管理者権限の必要なフォルダ(ProgramFiles等)に移動させない
何度やっても日本語化ができなくて、できてもハンパだったりと挙動もおかしい原因はここにあったみたい。10回以上eclipseのインストールをやり直して、eclipse.iniファイルも何十回も書き換えてそれでもダメで気が狂うかと思った(´・ω・`)
ということでc:\直下に移動させる。
・Pleiades (プレアデス) をインストール
http://mergedoc.sourceforge.jp/
ここの安定版1.3.3をDLして解凍。
出てきたフォルダとファイルをeclipseフォルダに移動。上書きするか聞かれるので上書き。
eclipse.iniファイルの最後尾に
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
を追加。
メモ帳は不可。ついでにメモリも増やしておく。
初回起動はeclipse.exe -clean.cmdファイルで起動。
この時点で、eclipseを起動するとオープニンググラフィックが赤いIndigoになって日本語が表示される。
前のボクの環境では、日本語化してあるのにeclipseノーマルの青いグラフィックだった。管理者権限でeclipseを起動して作業したのに書き換わらなかったファイルがあったみたい。
・AndroidSDKのインストール
http://developer.android.com/sdk/index.html
ここで64bit版のSDKをDL。
zip版でもexe版でもどっちでもいいけどexe版のほうが作業手順少ない。
インストール先はc:\program files\でOK。
c:\Program files\android-sdk\windowsというフォルダができるので、それを開いて中に入ってる SDK Manager.exe を起動。
※これは必ず管理者権限で!
ちなみにSDKのほうはandroidのSDKファイルを管理するツール。AVDのほうはエミュレータを作成したりするツール。
SDKはeclipseにpluginをインストールするとeclipse上からワンクリックで呼び出せるけど、管理者権限で起動しないので、pluginを追加インストールしても入らなかったりする。しかもエラー出ないので見た目的には入ったように見える。マジファッキン!(´・ω・`)
SDK上でtoolsとextrasに全チェック。あとは好きなandroidバージョンを選ぶ。というか2.2と2.1入れておけば十分。
DLクソ遅いけどガマンしる(´・ω・`)
プロバイダとか社内LANの影響でDLがまったく進まない場合があるけど、そんなときはSDKのtool-optionsを選んでmiscにあるForceなんちゃらにチェックを入れる。ちなみにhttpsを解除するオプション。
・ついでにエミュレータも作成しておく
AVD Manager.exeを管理者で実行。
Newをクリックして作成ウインドウを出す。
Name:好きにしろし^q^
Target:2.1
SD:128くらいでいいんじゃね?ちなみに衝撃だったのは、よくよくこの単位を見るとMiBってなってる。Men in Blackか! じゃなくてメビバイトのこと。2の20乗です。いつ使うんだよこんな単位・・・。
Snapshot:これ画面のスナップショットじゃなくて、エミュレータ状態のリジューム機能のこと。チェックを入れるとアプリが書き換わらなかったりと理解不能な現象に陥るのでチェックを外す。っていうかこんなハンパな機能実装しておくなgoogle!
Skin:ノーマルで。
Hardware:ハードウェアで必要となる機能をチョイス。GPS使いたいときにはここでGPSを選んだうえで、TargetをgooglAPIsにする。両方選ばないと使えない。SDカードもここで選んでおかないと、上で変な単位でチョイスしたSDカードが生きてこない。
完了するとエミュレータ一覧に出てくるので、選んでStart。これでエミュレータが起動する。
・eclipseにandroid-pluginをインストール
このままだとeclipseは単なるJavaプログラミング開発環境にすぎないので、androidのpluginを入れてやる。
Eclipseのメニュー[ヘルプ]-[新規ソフトウェアのインストール]を選ぶ。
「追加」をクリックするとリポジトリーとかいうウインドウに遷移する。
名前:好きにしろし^q^
ロケーション:https://dl-ssl.google.com/android/eclipse/
うまくいかない場合はhttpにする。
これでOKすると、リポジトリーウインドウの「保留中」が「開発ツール」に変わる。
ちょっと時間がかかるので紅茶でも飲んでゆっくりしていってね。
どうでもいいけど紅茶飲むとすぐトイレ行きたくなるよね。ショートカットでもあるんか?
出てきた項目全部にチェック入れて、同意でインストール。その後eclipseを再起動。
ツールバーにドロイド野郎が現われたらセットアップ完了。
以上で全工程終了です。
アプリ作るのも大変だけど、開発環境作るの大変すぎるだろおい(´・ω・`)
Destroy Gunners F[アプリレビュー]
更新サボってゲームしてました(´・ω・`) しかもモンハン。
そんなこんなで最近遊んだスマホアプリ紹介です。
ロボットアクションシューティング的なゲーム。
4種の武装を駆使して敵機を撃破する3Dアクション。
とくちょう
・スマホ3Dなのにかなり軽い。負荷軽減オプションをONにするとさらに軽い
・なんか無双みたい
・ゲーム中に武装切り替えがあるので攻撃の幅が広がる
・無料ゲームでこのレベルはなかなか無い
・広告表示はタイトルとレザルト画面のみ。プレイ中に余計な処理を挟まないのが負荷軽減にも貢献してるのかもしんない
ここがちょっと
・カメラ操作がクソすぎる。撃ちながら視点操作、走りながら視点操作、っていうごく当たり前の動作ができなくてカメラがグルグル回ったりする。マルチタップ対応してないんじゃないかって感じなんだけどこれボクのスマホだけ?(´・ω・`)
・射撃中、とっさに回避しようと移動キーをタップすると視点がグルグル回って被弾する
・スマホゲーとしてはよくできてる。でもコンシューマーで出したら爆死レベル
・PS1時代のゲームってこんな感じだった
・Level6くらいからアイテム出なさ過ぎて最終的には残弾0のパンチゲームになる
スコアランキングあったりする。
こういうのって鯖立てないといけないしインフラ整備も含めて個人で作るのはたいへんそう(´・ω・`)
4時間くらいがんばって世界ランキング20位という無駄な称号をゲット(´・ω・`)
70万点取るくらいだとLevel15くらいまで進むけど、Level10くらいになるとアイテムが本当に出ない。回復アイテムはほぼ絶望的なので、いかに被弾せずに、最小限の弾数で敵機を破壊するかが重要になったりする。
撃ちまくり無双ゲーかと思いきや実は節約ゲーなのかもしんない。
機体に成長要素がある有料版とかもあるけど、カメラがこのままだと課金してまでやる気にはなれないや(´・ω・`)
いや、おすすめですよ。マジで。
書き換えたアプリが更新されないときがある[androidアプリ開発]
エミュレータで表示してチェックしてまたコードいじって、と繰り返してるとエミュレータ上のアプリが更新されないときがあったりする。
コードが間違ってるのかと思っていろいろいじりだすともう泥沼(´・ω・`)
エミュレータの挙動がおかしくて、アプリが更新されないことがあるみたい。
HOMEに戻ればリジューム状態は終了するはずなのに。
そんなときはエミュレータの設定>アプリケーションを開いて、実機と同じようにアプリを削除することで解消できます。
この現象、うちだけ?(´・ω・`)
LinearLayoutで画面を描画してみる[androidアプリ開発]
前回はテキストを表示するのにTextViewクラスを使いました。
はっきり言ってまだまだぜんぜん意味不明だけど、LinearLayoutクラスを使って画面を描画してみよう(´・ω・`)
LinearLayoutクラスは解説を見ると「縦または横方向にビューを配していくレイアウト」って書いてある。とりあえず画面描画のクラスっぽい。
まずはクラスの追加から。
前回のドロイド君プログラムの一部を書き換える。
super.onCreate(savedInstanceState);
LinearLayout screen = new LinearLayout(this);
onCreateクラス以降にLinerLayoutを追加。
変数名?は画面をあらわすscreenとでも定義しておこう。
LinearLayoutに波線が出るのでctrl+スペースでimport。
ちなみにonCreateというのはそこからプログラムの動作がスタートするよというような呪文っぽい。アプリケーション中で一度しか使えないとか(例外があって、強制終了のときに使えるとかなんとか)。
つぎにこのscreenに対して、背景色をしていしてみる。
screen.setBackgroundColor(Color.WHITE);
Colorをimportしろと言ってくるのでインポートする。
Eclipseはこういう入力補助をしてくれるので便利。
で、Viewクラスを追加して四角を描いてみよう。
View box = new View(this);
四角なので名称はBoxに。
box.setBackgroundColor(Color.RED);
色は赤にしよう。
box.setLayoutParams(new LayoutParams(100,100));
サイズも決める。100x100くらいに。
今作ったboxをさっきのscreenに加えてみる。
screen.addView(box);
こんな感じ。
最後にscreenの中身を表示。
setContentView(screen);
実行してみる(´・ω・`)
今回のソースpackage jp.ne.so_net.blog.androp.hellodroid; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; public class Hellodroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout screen = new LinearLayout(this); screen.setBackgroundColor(Color.WHITE); View box = new View(this); box.setBackgroundColor(Color.RED); box.setLayoutParams(new LayoutParams(100,100)); screen.addView(box); setContentView(screen); } }
実際にはxmlでレイアウトを作成することがほとんどだし、画面の描画もonDrawを使うそうなのでこんな風にボックスを書いたりすることはまずないみたい。
Hello droid! 好きな文字列を表示してみる[androidアプリ開発]
前回は何もコードを書くこともなくHello world!が出たのでなんだかプログラムしてる感じがぜんぜんしなかった(´・ω・`)
前回のプログラムコードはワークスペースの
C:\ワークスペース\Hello world\src\sample\helloworld
という場所に入ってるのでちょっと覗いてみる。
package sample.helloworld; import android.app.Activity; import android.os.Bundle; public class helloworld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
ハァ?(´・ω・`)
何かいてあるのかさっぱりわかんないけど、アプリケーションの名前とかを表示するプログラムになってるみたい。
今回はこれに書き加えて、好きな文字列を表示してみよう。
ということで、Hello! Droid! と表示してみる。
まずは前回同様にプロジェクト作成。
この作業はワードとかの「新規作成」をすると白紙の用紙が出てくるみたいなもんなので毎回やる作業。
今回はちゃんとルールに沿って名前とか付ける。
プロジェクトができたらパッケージ・エクスプローラーでソースを開いてみる。
srcフォルダに入ってます。
このままだと前回のプログラムとやることいっしょなので、ここに手を加えてみる。
文字を表示するにはLinearLayoutクラスを使うやり方もあるけど、とりあえず簡単そうなTextViewクラスを使ってみよう。
ここでもうなんちゃらクラスとか意味不明な単語が出てきた(´・ω・`)
Javaのプログラムでキーになるのはクラス、メソッド、コンストラクタ、オブジェクト、インスタンスあたりの単語っぽい気がしてきた。解説サイトみてると毎回出てくるしきっと間違いない。
解説をざっくり読んだ感じだと、クラスは「決まった作業をしてくれるマッシーン」、オブジェクトとインスタンスはそこから出てくる実際の「成果物」みたい。ほんとか?(´・ω・`)
このへんはこれから詳しく勉強するとして、とりあえずTextViewクラスを実際に使ってみるぞ。
まずソースの
setContentView(R.layout.main);
という部分がViewクラスというもので、これがアプリ名とか表示してくれていたみたいなのでこれを消す。
で、表示する文字列をTextViewクラスに作らせる。
TextView _helloDroidText = new TextView(this);
_helloDroidText.setText("Hello! Droid!");
簡単に説明すると、1行目はTextViewクラスで出来上がるオブジェクトを入れる入れ物としてhelloDroidTextというのを用意して、TextViewクラスを呼び出すためにnew TextViewを記述。なんかこのへんは決まり文句らしい。
2行目で実際にhelloDroidTextの中に入れる文字列を記述。
このソースを記述すると、Eclipse上でTextViewに赤の波線が入る。
TextViewクラスを使うためにはimportで組み込まなきゃいけないけど、それがまだなのでEclipseが自動でマーキングしてくれるみたい。
ということでクラスを使うために、importします。
TextViewの後にカーソルを持っていって Ctrl + スペースを押すと自動でインポートしてくれる。
もちろん手作業で
import android.widget.TextView;
と記述してもいい。
これでhelloDroidTextの中にHello! Droid!が入ってるはず。きっと(´・ω・`)
このままじゃまだ下準備ができただけで、実際の画面には表示されない。
画面に描画するには最初に消したViewクラスをもう一度記述する。
setContentView(_helloDroidText);
ということでこんなソースになった。
package jp.ne.so_net.blog.androp.hellodroid; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class Hellodroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView _helloDroidText = new TextView(this); _helloDroidText.setText("Hello! Droid!"); setContentView(_helloDroidText); } }
これでとりあえず実行してみる。
わーいできたー(´・ω・`)
トラブル無しで成功しているっぽく見えて実はトラブルが。
何度実行しても前回作った「ハロワ」が出てきやがってですね、パッケージエクスプローラーから削除してもハロワ。
ワークスペースを直接見てみたらハロワのソースがそっくりそのまま残っていやがるので削除して実行してもまたハロワ。
なにこの怨念・・・(´・ω・`)
完全に削除しても出てくるなんてこんなの絶対おかしいよ!
というところで、エミュレータを疑ってみた。
エミュレータが前回起動させたハロワをリジューム状態で保持しているんじゃないか。
ためしにHOMEへ戻って終了、もう一度「Hello!ドロイド君」を動かしてみたところ・・・
わーいできたー(´・ω・`)
前途多難すぎる(´・ω・`)
始まりはいつだってHello world![androidアプリ開発]
Eclipseを起動して、
「ファイル」-「新規」-「プロジェクト」を選択。
「Android Project」を選ぶ。
Project name:アプリの管理名称。PCのローカル上で保存される名前っぽい。「Hello world」にしてみる。
【※追記】半角英数字奨励。スペースを入れると他から呼び出したりするときにダブルクォーテーションで囲む必要があったりするらしいのでスペースは入れないほうがいいみたい。入れちゃったけど(´・ω・`)
Build Target:AndroidOSのバージョンを選ぶ。Market見てるとだいたい2.1なので2.1にしてみる。
【※追記】AndroidOSというよりAPIレベルのことらしい。でもOSと同義と捉えてあんまし問題ない。
Package name:パッケージ名称。1端末上で同じ名前は使えないので、実際に作るときは世界でひとつだけのユニーク名称を考える。今回は配布しないので「sample.helloworld」にしてみた。
ちなみに、「二つ以上の固有名称」を付けないといけないのでドット区切りで名前をつけること。ドメイン持ってる人は「ドメイン名.アプリ名」とかにするらしい。そして使える文字は半角英数字のみ。
【※追記】半角英数字小文字のみで、記号はアンダースコアのみ。ハイフンもダメ。
Create Activity:さっそく意味不明の単語「アクティビティ」が出てきた。アクチ・・・ビッチ?
メインプログラムになるものらしくて、これから各サブプログラムにアクセスするみたい。よくわかんないけど「helloworld」にしてみる。これはすごい重要らしいので今後こいつに苦しむことになる予感がすごいする(´・ω・`)
【※追記】保存される.javaファイルの名称にもなるのでファイル名として正しい英数字で大文字で始めるのがいいみたい。半角にしちゃったけど(´・ω・`)
Minimum SDK Version:SDKのバージョン。ターゲットにあわせるので2.1のナンバリング「7」を選ぶ。
Application name:実機で表示するときのアプリ名。日本語が使えるので「ハロワ」にしてみた。
完了するとパッケージ・エクスプローラーに「Hello world」が現われる。
さっそく実行してみる。
パッケージの「Hello world」を選んだ状態でツールバーの再生ボタンみたいなやつをクリック。
わーいできたー(´・ω・`)
アプリ「ハロワ」ができました。
・・・あれ?
「Hello World,helloworld!」なんて入力した記憶がないぞ。
どういうことだ・・・(´・ω・`)
ということで次回は任意の文字列出したりとかします。
どうでもいいけどなんかエミュの立ち上がり速度が恐ろしく速くなってる。昨日までは30秒くらいかかってたのに今日は5秒かからず起動する。何も変えてないはずなのにナニコレ・・・(´・ω・`)
絶対領域new FREE[アプリレビュー]
去年の秋にMarktがリニューアルして以来、エロアプリが全滅状態になったみたい。
エロアプリをアップしても即座にリジェクトされてしまい、運が悪いとアカウント停止までされてしまうとか。
いろいろ調べたところ、リジェクトの基準はこんな感じ
・パンツはOK
・脱いだらアウト
・エロ行為につながる描写はダメ
・揺れてもOK
ちなみにアイフォーン(笑)はもっときびしくて
・パンツもアウト
・揺れてもアウト
らしい。
揺れないおっぱいなんてそんなのもうおっぱいじゃねぇ・・・!(´・ω・`)
ということでAndroidMarketでDLしたおっぱい揺れるゲームです。
とくちょう
・揺れる
なんていうか、揺れることよりも顔を手で隠してるところにマニアックなエロを感じる(´・ω・`)