はじめに Android は スマートフォンやタブレット PC などの携帯情報端末を主なターゲットとしたプラットフォーム (OS) です Android は 2007 年に Google を中心にした規格団体 Open Handset Alliance から発表され 2008 年から Android

Size: px
Start display at page:

Download "はじめに Android は スマートフォンやタブレット PC などの携帯情報端末を主なターゲットとしたプラットフォーム (OS) です Android は 2007 年に Google を中心にした規格団体 Open Handset Alliance から発表され 2008 年から Android"

Transcription

1

2 はじめに Android は スマートフォンやタブレット PC などの携帯情報端末を主なターゲットとしたプラットフォーム (OS) です Android は 2007 年に Google を中心にした規格団体 Open Handset Alliance から発表され 2008 年から Android 対応のスマートフォンが多数販売されるようになりました また アプリケーションマーケットである Google Play Store( 旧名称は Android Market) が提供されていて 2013 年 7 月時点で有料 無料含め 100 万を超えるアプリケーションが提供されています Google Play Store を通して企業だけでなく 一般ユーザーが自作のアプリケーションを販売することができる点もいままでにない利点です つまり ソフト会社の技術者以外にも 学生を中心に一般の人でも Android アプリで商売や起業ができるようになる可能性があり Android アプリ市場は今後急速に普及すると思います Android のアプリケーションを開発するためには Android SDK Android ADT Eclipse などのツールをダウンロードし Eclipse に Android ADT をインストールすることで Eclipse 上で開発を行います Android のアプリケーションを開発するための言語は Java と XML です 本書は何らかの言語でプログラム経験はあるが Java や Android アプリを初めて勉強する人を主な対象とします Android アプリを作るためには Java と XML の知識が必要になります Java や XML を本格的に学ぶにはそれぞれ入門書が必要になります 本書では Android アプリを作りながら Java も XML も手っ取り早く学べるように工夫してあります そこでまず Android グラフィックスを利用して画面に文字 直線 イメージなどを描画するプログラムを例に Java の基本的な言語仕様について 2 章で学びます 次にボタンやテキストビューなどのウイジェットを XML で記述する方法を 3 章で学びます ここまでが Java と XML の基本事項になります 4 章 5 章 7 章 8 章でウイジェットの配置方法作や使い方をさらに説明します Android 的プログラミングの基礎としてタッチイベント インテントとアクティビティ Handler とサービスについて 6 章 9 章 10 章で説明します 各種処理としてサウンドとムービー アニメーション グラフィックス ファイル処理について 11 章 ~14 章で説明します Android 特有の機能として GoogleMap センサーとカメラ 音声合成 音声認識について 15 章 ~18 章で説明します 最後にプログラミング力をアップするために 19 章でリバーシーゲームを段階を追って作成します ということで本書は以下のような章構成となっています 1 章 Java による Android アプリの作り方 2 章 Android グラフィックスによる Java 入門 3 章ウイジェットと XML 4 章レイアウトと Graphical Layout

3 5 章 main.xml を使わずにレイアウトする 6 章タッチイベント 7 章トースト ダイアログ 8 章各種ウィジェット 9 章インテントとアクティビティ 10 章 Handler とサービス 11 章サウンドとムービー 12 章アニメーション 13 章グラフィックス 14 章ファイル処理 15 章 GoogleMap 16 章センサーとカメラ ( 実機のみ ) 17 章音声合成 18 章音声認識 ( 実機のみ ) 19 章リバーシーゲーム 本書の各節は 基本的に 文法や概念の説明 例題 練習問題 という3つで構成し 初心者がステップを踏んで学習できるように配慮しました 本書一冊で Android の基礎すべてが完全理解できます これから Android アプリの開発を志す方々にとって 本書が少しでもお役に立てば幸いです 2014 年 6 月河西朝雄 本書の開発環境は以下です Android SDK android-sdk_r windows Eclipse Eclipse 4.2 Juno( 英語版 ) エミュレータでの開発ターゲットは Android 4.2(API 17) ですが Android 2.2(API 8) でも動作確認しています 実機は SAMSUNG GALAXY S (Android 2.2(API 8)) と SAMSUNG GALAXY S Ⅲ (Android 4.1(API16)) で確認しました Android Android SDK Eclipse の最新情報についてはカサイ. ソフトウェアラボの電子書籍サイト ( を参照して下さい

4 目次 1 章 Java による Android アプリの作り方 プロジェクトの作り方 各種名前の意味 作成されたファイル 作成したプログラムの実行 表示内容を変えてみる Android アプリの典型的な Java コードの意味 28 2 章 Android グラフィックスによる Java 入門 Android グラフィックスの基礎 for 文による繰り返し 変数の役割 イメージの表示 イメージリソースの配置 if else 文による条件判定 重ループ else if 文 配列 次元配列 データ型 while 文 ユーザ定義メソッド メンバ変数 配列引数 Math クラス 87 応用サンプルダイアモンドリング 93 応用サンプルモンテカルロ法によるπ 95 応用サンプルタートルグラフィックス 97

5 3 章ウイジェットと XML Android の XML ファイル ボタン (Button) とクリック リスナー テキストビュー (TextView) エディトテキスト (EditText) チェックボックス (CheckBox) ラジオボタン (RadioGroup と RadioButton) スピナー (Spinner) リストビュー (ListView) イメージビュー (ImageView) ArrayAdapter onclick リスナーの作り方 ウイジェット自身にリスナーを付ける 独自の list.xml を使ったデータのバインディング Simple Adapter を使ったデータのバインディング 章レイアウトと Graphical Layout Graphical Layout の使い方 Relative Layout( 相対レイアウト ) TableLayout( テーブル レイアウト ) 201 応用サンプル入力フォーム 章 main.xml を使わずにレイアウトする LinearLayout を Java コードで配置 複数の同種類のウィジェットにイベントリスナーを付ける レイアウトのネスト ウイジェットと View の併存 231 応用サンプルダイアモンドリング 章タッチイベント タッチアクションの種類 ビュー画面への描画 244

6 6-3 画面サイズ シングルタップ ダブルタップ ロング タッチの判定 スクロール フリング ( フリック ) マルチタッチ ( 実機のみ ) ピンチイン アウト ( 実機のみ ) 275 応用サンプル羅針盤の針を回す 281 応用サンプル相性占い ( 実機のみ ) 章トースト ダイアログ トースト アラート ダイアログ AlertDialog にリスト項目の表示 カスタム ダイアログ 306 応用サンプル食文化判定 章各種ウィジェット イメージボタン (ImageButton) トグルボタン (ToggleButton) チェック付きテキストビュー (CheckedTextView) アナログ時計 / ディジタル時計 (AnalogClock/DigitalClock) プログレスバー (ProgressBar) シークバー (SeekBar) スクロールビュー (ScrollView) ギャラリー (Gallery) グリッドビュー (GridView) 351 応用サンプル Gallery+GridView 章インテントとアクティビティ インテントとは アクティビティとは インテントによる画面遷移 呼び出したアクティビティから結果を戻す 383

7 9-5 アクティビティ間でのデータの授受 ステータスバーへの通知 (Notification) 電話 ( 実機のみ ) メール ( 実機のみ ) ACTION_PICK アクション ( 実機のみ ) 章 Handler とサービス Thread と Handler 一定時間ごとの処理 イメージを画面上で移動する サービス システムサービス 446 応用サンプルラケットゲーム 応用サンプルラケットゲーム 章サウンドとムービー サウンドの再生 再生位置の取得 SD カードのファイルの再生 ( 実機のみ ) システムサウンド トーンジェネレータ サウンドの録音 ( 実機のみ ) ムービー ブラウザ (WebView) 章アニメーション Tween アニメーション Interpolator Frame アニメーション 520 応用サンプル頁送りアニメーション 526

8 13 章グラフィックス 基本図形の描画 点群を結ぶ テキストの表示 Bitmap 座標変換 パス ondraw メソッド以外での描画 557 応用サンプル回転体モデル 562 応用サンプルイメージ叩き 章ファイル処理 バイナリー ストリーム テキスト ストリーム assets フォルダのファイルの読み込み assets フォルダのファイル一覧 フォルダの内容の取得 SD カードのファイルへの読み書き ( 実機のみ ) 599 応用サンプルイメージフォルダのイメージ一覧を Gallery に表示 章 GoogleMap Android アプリから GoogleMap を使うのに必要なもの インテントを使って GoogleMap の表示 マップコントローラ MapView でタッチイベントを捕捉する GPS から現在地を表示 ( 実機のみ ) 章センサーとカメラ ( 実機のみ ) 方位センサー 方位センサーの応用 ( 羅針盤 ) 加速センサー 加速センサーの応用 ( 傾きでボールをころがす ) 653

9 16-5 カメラの映像をプレビュー表示し シャッターを切る SD カードに保存 写真に撮影日時をプリントする 章音声合成 英語テキストを発音する 複数のテキストを読み上げる 通訳アプリ 読み上げる言語の選択 章音声認識 ( 実機のみ ) 音声入力した言葉をトーストで表示 音声入力した言葉を判別 音声入力した言葉で Web 検索 県名を音声入力して地図を表示 章リバーシーゲーム 盤面を作る 黒石を置く 盤面の情報を配列に置く 黒番 白番で交互に置く 石を置ける位置かどうかチェックする 自動的に反転する コンピュータが手を打つ コンピュータに戦略を持たせる 完成版 737 練習問題解答 746

10 1 章 Java による Android アプリの作り方 以下の作業が終わって Eclipse で Android アプリを開発する環境が整備されているものとして話を進めます Android SDK のインストール Eclipse のインストール Eclipse への Android Plugin(ADT) のインストール Android アプリを実行するために必要な AVD(Android Virtual Device) の作成 この章ではデフォルトのスケルトン ( システムが自動生成するプログラムの骨格 ) を使 って Hello world! というメッセージを TextView( テキストビュー ) に表示するプログ ラムの作り方の手順を説明します また作成されたファイルの意味と役割を説明します 注 Eclipse や Android SDK のバージョンにより作業手順が異なる場合があります

11 1-1 プロジェクトの作り方 Android アプリはプロジェクトで管理します プロジェクトを保管するためのフォルダを ワークスペースと呼びます 1. ワークスペースの作成 Eclipse を起動し Workspace Launcher 画面でワークスペース名を入力します ここでは デスクトップの Android フォルダにワークスペースを chapter1 として作成します Use this as the default and do not ask again にチェックが入っているとワークスペースの設定画面は出ません 2. プロジェクトの作成 以下に示す 1~5 の手順でプロジェクトを作成します 1 File - New - Android Application Project を選択します

12 2アプリケーション名等の入力 Application Name Project Name Package Name Application Name を Test1 と入力します 自動で Project Name は Test1 Package Name は com.example.test1 となりますので そのままとします 1つの Java アプリを構成する各種ファイルを管理するための基本をプロジェクトと呼びます プロジェクト名のフォルダ内に各種ファイルが格納されます SDK バージョン AndroidSDK のバージョン (Target SDK と Compile With) を選択します ここでは API 17:Android 4.2 を選択しました Minimum Required SDK はアプリケーションが動作する最低の Android SDK バージョンです ここでは API 8:Android 2.2 を選択しました 注 SDK バージョンと API レベル Android SDK バージョン API レベル コードネーム Jelly Bean Jelly Bean Jelly Bean Ice Cream Sandwich Ice Cream Sandwich Honeycomb

13 (2.3.3) 10 Gingerbread Froyo Eclair Donut Cupcake 非公開 非公開 3Configure Project プロジェクトの構成を指定します Create custom launcher icon 独自に launcher icon を作る場合はチェックを入れます ( デフォルト ) ここではデフォルトのアイコンを使用するのでチェックを外します Create activity Android 画面の基本は Activity で このクラスを自動的に作る場合に にチェックを入れます ( デフォルト )

14 4 アクティビティの作成 BlankActivity( 通常のアクティビティ ) を選択します 注 Android 4.2 では以下の 5 種類のアクティビティを選択できるようになりました BlankActivity FullscreenActivity

15 LoginActivity MasterDetailFlow SettingsActivity

16 5Activity Name Layout Name の入力デフォルトで以下のような名前になっていますので このままとします 古いバージョンでは Activity Name は Test1Activity Layout Name は main となっていました Activity Name:MainActivity Layout Name:activity_main

17 2 章 Android グラフィックスによる Java 入門 Android アプリを作るためには Java と XML の知識が必要になります Java や XML を本格的に学ぶにはそれぞれ入門書が必要になります 本書では Android アプリを作りながら Java も XML も手っ取り早く学べるように工夫してあります そこでまず Android グラフィックスを利用して画面に文字 直線 イメージなどを描画するプログラムを例に Java の基本的な言語仕様について学びます Android グラフィックスを例にしたのは Android グラフィックスでは XML の知識は必要ないこと 視覚的にも興味のある結果が得られ学習のモチベーションが上がることです この章では Android アプリを作る上で当面必要な Javaの基礎知識として以下の内容を説明します オブジェクト指向言語特有の概念クラス インスタンス ( オブジェクト ) コンストラクタ メソッド C 言語などの基本言語と共通の概念変数 演算子 for 文や if 文などの流れ制御文 配列 Android グラフィックスに特有な概念描画メソッド ビットマップ 注 この章のプログラムリストについて最初の例題のみ全リストを掲載してありますが その後の例題は GView クラス内のみが変更されるので GView クラスだけをリストとして掲載してあります 最初の例題を Graph1 としています その後の例題は Graph2 Graph3 などと別なプロジェクトを新たに作ってもよいですが Graph1 の ondraw 内だけを変更してもよいです ただしこの場合は前に作ったプログラムは無くなってしまいますので注意してください

18 2-1 Android グラフィックスの基礎 最初の例は Android という文字をグラフィックスで表示します Android グラフィックスは View クラスを元にして行います 描画処理は ondraw メソッドの中に記述します 描画に当たっては まず Paint クラスのメソッドを使って描画色やテキストサイズを指定し 次に Canvas クラスのメソッドを使ってテキストの描画を行います 1. View クラスグラフィックスを描画する画面は View クラスを継承して作ります 以下は GView という名前のユーザ定義クラスを作っています コンストラクタの GView はスーパークラスのコンストラクタを呼び出す部分でこれが定型です ユーザが行う描画処理は ondraw メソッド内に記述します ondraw メソッドが呼び出されたときに Canvas クラスの引数 canvas に描画オブジェクトが渡されますので この canvas に対し描画メソッドを使ってグラフィックス処理を行います ondraw メソッドの仮引数を Canvas canvas としていますが 仮引数の名前はなんであってもよいので Canvas c などとしても構いません private class GView extends View { View クラスを継承したユーザ定義クラス Gview public GView(Context context) { コンストラクタ super(context); protected void ondraw(canvas canvas) { ondraw メソッド描画内容を記述 Canvas クラスの引数 canvas この GView クラスを実際に画面に設定するには setcontentview(r.layout.main); の代わりに setcontentview(new GView(this)); とします 前者はウイジェットを配置 したレイアウトを表示し 後者はグラフィックス画面を表示します 2. Paint クラスとオブジェクト ( インスタンス ) Paint クラスは描画色や文字サイズなどの描画情報を扱うクラスです クラスからインスタンスを生成するには new 演算子を用いて 以下のように宣言します コンストラクタはクラス名と同じ名前の特別なメソッドで初期化を行うものです これで paint という名前の Paint クラスのオブジェクトが生成されます 以後 paint に対しメソッドを適用します

19 クラス名 コンストラクタ Paint paint=new Paint(); オブジェクト ( インスタンス ) 注 オブジェクトとインスタンスクラスはオブジェクトを生成するための金型 ( テンプレート ) のようなものと考えることができます オブジェクト指向言語では 金型から実際に生成された実体をオブジェクトと言い クラスからオブジェクトを作ることをインスタンス化 (instantiation) と言います C++ ではクラスを実体化したものをオブジェクトと呼び Java ではインスタンス化したオブジェクトをインスタンスと呼びます この場合インスタンス=オブジェクトと考えてよいです 本書では インスタンス という言葉が適切な場合以外は インスタンス と オブジェクト を使い分けずに オブジェクト と呼ぶことにします 3. Paint クラスのメソッド描画色を緑 フォントのサイズを 40 ピクセルに設定するには paint オブジェクトに対し setcolor メソッド settextsize メソッドを使って以下のようにします Color.BLUE は青色を示す Color クラスの定数です paint.setcolor(color.blue); 青色 paint.settextsize(40); テキストのサイズを 40 ピクセル 4. Canvas クラスの描画メソッド ondraw メソッドの引数 canvas に対し描画を行うには drawtext メソッドを用います 指定する x,y 座標はテキストの左下隅の座標です canvas.drawtext("android", 10,50, paint); 描画位置の x,y 座標 Android 左下隅の座標を表示位置として指定 注 メソッドとは メソッドはある処理を行う機能単位で ユーザは引数というデータをこのメソッドに渡 して目的の処理を行います

20 注 メソッドの種類 ondraw と drawtext はどちらもメソッドですが 呼び出し方 ( 呼び出され方 ) が異なります 通常 onxxx メソッドはシステムから呼び出されるメソッドで 処理内容をユーザが定義します たとえば ondraw メソッドは画面に描画を行う必要が生じたときに呼び出されます これに対し オブジェクト. メソッド ( 引数, ) の形式で呼び出すメソッドはユーザが直接メソッドを呼び出します 注 インデントプログラムのブロック構造を分かりやすくするため内側のブロックになるほど書き出す位置を右にずらすことをインデント ( 字下げ ) と言います Eclipse では自動的に 4 文字幅のインデントをとります 例題 2-1 以上をまとめた全リストを示します それぞれの位置関係を確認してください MainActivity.java package com.example.graph1; import android.app.activity; import android.content.context; import android.graphics.*; import android.os.bundle; import android.view.view; import android.view.menu; public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(new GView(this)); private class GView extends View { private Paint paint; public GView(Context context) { super(context); paint=new Paint();

21 protected void ondraw(canvas canvas) { paint.setcolor(color.blue); paint.settextsize(40); public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.activity_main, menu); return true; 注 oncreateoptionsmenu メソッドは削除しても構いません 注 背景色古い開発環境 (2012 年 6 月頃までの Android SDK) ではデフォルトの背景色は黒背景でしたが 新しい開発環境では白背景です デフォルトの背景色を変えるには ondraw メソッドの先頭で以下のように背景色を設定します 背景白にするには Color.WHITE とします Protected void ondraw(cavas canvas){ canvas.drawcolor(color.black);

22 注 Android Lint Checks 古い開発環境では以下のように ondraw メソッド内で Paint オブジェクトを取得しても 警告エラーになりませんでした protected void ondraw(canvas canvas) { Paint paint=new Paint(); paint.setcolor(color.blue); paint.settextsize(40); canvas.drawtext("android",10,50,paint); 新しい開発環境では Paint paint=new Paint(); のところで Avoid object allocations during draw/layout operations (preallocate and reuse instead) という警告エラーがでます これは ondraw が呼ばれるたびに Paint オブジェクトを生成するという無駄を止め GView 内で一度生成したものを使いまわしなさいということです このような厳しいチェックを Android Lint Checks と言います このため 本書では paint をメソッド外で宣言し GView コンストラクタ内で Paint オブジェクトを生成し ondraw メソッドで paint を使用するという多少煩雑な方法をとっています private class GView extends View { private Paint paint; paintの宣言 public GView(Context context) { super(context); paint=new Paint(); Paintオブジェクトの生成 protected void ondraw(canvas canvas) { paint.setcolor(color.blue); paintの使用 paint.settextsize(40); canvas.drawtext("android",10,50,paint); 警告エラーを無視するなら上のように ondraw 内に全てまとめる方が簡単です

23 3 章ウイジェットと XML Android ではテキストビューやボタンなどの GUI 部品をウイジェット (Widget) と呼んでいます ウイジェットは main.xml という XML ファイル中で定義します XML(Extensible Markup Language: 拡張可能マークアップ言語 ) は文書やデータの意味や構造を記述するためのマークアップ言語の一つです Android ではレイアウトファイル (main.xml) 文字列リソースファイル(string.xml) マニフェストファイル (AndroidManifest.xml) などが XML で記述されています XML では利用者が自由に要素や属性を定義でき プログラムで XML 要素を操作できる ( 具体的には findviewbyid メソッドで main.xml に設定したウイジェットを取得するなど ) というメリットがあります この章ではウイジェットを記述するための XML の一般的な書き方と ボタン テキストビュー エディトテキスト チェックボックス ラジオボタン スピナー リストビュー イメージビューなどの個々のウイジェットの具体的な使い方を説明します ウイジェットをクリック ( タッチ ) したときのアクションを監視するものをリスナーと呼びます このリスナーをウイジェットに組み込む方法を説明します

24 3-1 Android の XML ファイル Android で使用している XML はレイアウトファイル (activity_main.xml) や文字列リソースファイル (string.xml) に記述されています これらのファイルは res/layout や res/values フォルダに格納されています activity_main.xml <RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainactivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true" /> </RelativeLayout> 注 古いバージョンではレイアウトファイルのデフォルト名は main.xml でした 注 LinearLayout と RelatireLayout 新しいバージョンの Android SDK ではデフォルトで生成される activity_main.xml の

25 レイアウトが RelatireLayout になっています 古いバージョンでは LinearLayout でした これは 4 章で説明する Graphical Layout でウィジェットを配置する場合 Relative Layout の方が都合よいからです XML コードで直接指定する場合は LinearLayout の方が簡単なので この章の例題は LinearLayout を使います string.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">test1</string> <string name="hello_world"> ようこそ Android!</string> <string name="menu_settings">settings</string> </resources 1. XML の書式 XML では 文書構造を構成する個々のパーツを 要素 ( エレメント :Element) と呼びます 要素は要素を示すタグと内容で構成されます タグは開始タグと終了タグがあり その 2 つのタグの間に 内容 を記述します この 内容 は定義する文字列であったり別の要素であったりします 開始タグの中にはより細かな指定を属性で行うことができます 属性にはそれぞれ値を指定します これらの各項目は行を分けて書いても 1 行にまとめて書いても同じです < 開始タグ属性 = 値属性 = 値 > 内容 </ 終了タグ > たとえば string.xml には以下のような要素が記述されています 開始タグ 内容 <string name="app_name">test1</string> 属性 終了タグ

26 注 本書では XML の各要素のインデントはネストが深くなるごとに 4 文字の空白を置く ことにしています 2. XML 宣言 (<?xml?>) XML 宣言はそのファイルが xml で記述されていることを XML パーサに指示するためのもので <?xml で始まり?> で終わります version 属性に XML バージョン encoding 属性に文字エンコーディングを指定します 現在の XML バージョンは 1.0 です Android の文字エンコーディングは utf-8 です UTF-8 UTF-8(Unicode Transformation Format) は Unicode を 8 ビット単位の可変長コード (1~4 バイト ) にエンコードする方式でインターネットで広く使われているエンコード方式です ASCII コード対応文字は ASCII コードのまま 1 バイトですが 日本語は 3~4 バイトになります 3. XML 名前空間 (xmlns) この XML ファイルで使用する要素や属性に関する名前空間 (NameSpace) が定義され ている場所を指定します この指定はルート要素にだけ置きます xmlns:android=" 接頭辞 名前空間 URI( 定義場所 ) このように指定することで 接頭辞の android を使って 各要素の属性を android:id や android:layout_width のように指定します 4. レイアウトボタンやテキストビューなどのウイジェットを配置する方法をレイアウトと呼び Android では LinearLayout RelativeLayout FrameLayout TableLayout などがあります 古いバージョンのデフォルトのレイアウトは LinearLayout ですが 新しいバージョンのデフォルトのレイアウトは RelativeLayout です XML で直接記述する場合は LinearLayout の方が簡単なので本書では基本的には LinearLayout を使用します LinearLayout は <LinearLayout> で始まり </ LinearLayout> で終わりますす この 2 つのタグの間にウイジェットを置きます LinearLayout では宣言されたウイジェットの順序で単純 ( 直線的 ) にウイジェットを並べます レイアウトに指定する主な属性は以下です android:orientation ウイジェットを並べる方法で "vertical"( 垂直 ) "horizontal"( 水平 ) を指定します 指定し

27 なければ "horizontal" とみなされます android:layout_width android:layuot_height レイアウトの幅と高さを指定します 値には "fill_parent"( 可能な限り拡大 ) または "wrap_content"( 表示に必要なサイズ ) または具体的な数値を指定します 注 fill_parent と match_parent API 8 からは fill_parent の代わりに match_parent を使用することが推奨されていますが 古い環境のことも考えて本書では従来の fill_parent を使用しています 新しい環境に合わせたい場合を match_parent を使用してください 5. ウイジェットウイジェットとは一般に デスクトップの好きな位置に置いておくことのできる小さなアプリケーション ( カレンダー ノートパッド 地図 検索など ) を指します Apple や Yahoo! などが ウィジェット と呼び Google や Microsoft は ガジェット と呼んでいます widget gadget とも元の英語の意味は 小さな道具 という意味です Android ではボタンやテキストビューのような予め定義された UI(UserInterface) 部品を標準ウイジェット ( 単にウイジェット ) と呼んでいます ボタンは XML では次のように定義します <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" クリックしてね " /> LinearLayout で android:orientation="vertical" の場合は縦に並べていくのでウイジェッ トの layout_width は "fill_parent"( 横幅一杯に広げる ) layuot_height は "wrap_content" ( 実際に表示される内容の大きさ ) とします 注 チェックの厳しい環境では文字列リソースを使わずに android:text=" クリックしてね " のように直接文字列を指定すると警告エラーとなります 警告を回避するには string.xml に以 下のようにリソースを定義し android:text="@string/msg" とします

28 本書では簡便のために 文字列リソースを使わずに直接文字列を指定していますので警 告エラーは無視してください 6. ウイジェットの ID(android:id) ウイジェットの ID は android:id 属性に指定します Java コードから findviewbyid メソッドを使ってウイジェットを取得する際の ID を指定します ID の指定方法には以下の 2 種類があります 1android:id="@+id/xxx" リソースファイル (main.xml など ) で定義しているウィジェットのユーザが定めた ID を指定します 文字列の先頭にあるアットマーク (@) は XML パーサに解析をさせ id 以降の文字列を展開し それを ID リソースとして識別させるということを指示しています プラスマーク (+) は 生成される R.java ファイル内で リソースのひとつとして追加される必要がある新しいリソースの名称であることを意味しています 2android:id="@android:id/xxx" android 名前空間でシステムが予め定めている ID を指定します ListView などで使用することがあります Android のリソース ID を参照する場合 プラスマークは不要ですが android:id="@android:id/empty" のように android パッケージネームスペースを追加する必要があります パッケージネームスペース付きの場合はローカルのリソースクラスからではなく android.r リソースから ID を参照するようになります 7. ウイジェットのテキスト (android:text) android:text にはウイジェットに表示するテキストを指定します 文字列リソースを リソース名 を指定します android:text="@string/hello"

29 直接文字列を指定する場合は "" 内にその文字列を指定します android:text=" クリックしてね " 8. 空タグボタンやテキストビューなどの多くのウイジェットは開始タグと終了タグの間に別のタグを持ちません このようなタグを空タグと呼びます 正規な書き方なら 次のように開始タグと終了タグを書きます <Button 属性 = 値 > </Button> しかしこれは煩雑になるので 開始タグの最後を /> で終わることで 終了タグを省略する便 法があります <Button 属性 = 値 /> 9. R.java Java からリソースにアクセスするためのクラスが gen フォルダの R.java に自動生成されています このファイルは自動生成されるもので ユーザが変更を加えてはいけません たとえば 以下のようなリソースを定義したとします activity_main.xml に配置したウイジェットの TextView(id は text) と Button(id は button) drawable のイメージ ic_launcher.png と white.png string.xml で定義した文字列リソースの "hello_world" と "app_name" この場合の R.java の定義内容は以下のようになります リソースの種別ごとに 0x7f 番代は drawable リソース 0x7f 番代は id 属性で定義されたレイアウ トやウイジェットの ID などと内部管理用の ID が割り当てられます

30 R.java public final class R { public static final class array { public static final int items=0x7f050000; public static final class attr { public static final class drawable { public static final int ic_launcher=0x7f020000; イメージファイル public static final int white=0x7f020001; public static final class id { public static final int button=0x7f080000; ウイジェットのID public static final int menu_settings=0x7f080002; public static final int text=0x7f080001; public static final class layout { public static final int activity_main=0x7f030000; レイアウトファイル public static final class menu { public static final int activity_main=0x7f070000; public static final class string { public static final int app_name=0x7f040000; 文字列リソース public static final int hello_world=0x7f040001; public static final int menu_settings=0x7f040002; public static final class style { // 省略 R.java で定義される主なリソース ID クラスは以下があります layout クラス layout リソースの xml ファイル名 0x7f からの通し番号が割り当てられます id クラス

31 id 属性で定義されたレイアウトやウイジェットの ID 0x7f からの通し番号が割り当てられます drawable クラス drawable リソースのイメージファイル名 0x7f からの通し番号が割り当てられます string クラス string.xml に記述されている文字列リソース名 0x7f からの通し番号が割り当てられます 10. R.layout.main のロードアプリケーションをコンパイルすると 各 XML レイアウトファイルは View リソース内にコンパイルされます アプリケーションコードからレイアウトをロードする必要があり そのコードは Activity.onCreate() のコールバックメソッドで実装することになります setcontentview() にレイアウトリソースの参照を R.layout. レイアウトファイル名 の形で引数として渡してそのメソッドを呼び出します 例えば XML レイアウトが activity_main.xml の場合 以下のようにしてアクティビティにロードします public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); 11. findviewbyid によるウィジェットの取得 main.xmlで定義されているウイジェットをjava 側から操作するためにはfindViewById メソッドで ウイジェットオブジェクトを取得します main.xml でボタンの ID を android:id="@+id/button" と定義していた場合 R.java ではこの ID は Java 用に R.id.button と定義し直されていて この ID を findviewbyid の引数に指定します Button bt=(button)findviewbyid(r.id.button); 注 キャスト (Button) のように () 内にクラス名 (Button や TextView など ) や型 (int や float など ) を書いたものをキャストと呼びます findviewbyid で取得するオブジェクトは Button であったり TextView であったりするのでキャストによりそのオブジェクトのクラスまたは型を明示する必要があります キャストがないとエラーとなります

32 4 章レイアウトと Graphical Layout ウイジェットを配置するコンテナをレイアウトと呼びます Android で指定できるレイアウトとしてリニアレイアウト 相対レイアウト フレームレイアウト テーブルレイアウトの 4 種類があります Android 2.x でのデフォルトのレイアウトは Linear Layout(Vertical) ですが Android 4.x でのデフォルトのレイアウトは Relative Layout です これは Graphical Layout でウィジェットを配置する場合 Relative Layout の方が都合よいからです 3 章では activity_main.xml に XML コードを直接記述してレイアウトやウィジェットを配置しました この章では Graphical Layout を使って パレットからマウス操作でレイアウトやウィジェットを配置する方法を説明します

33 4-1 Graphical Layout の使い方 パッケージ エクスプローラーから activity_main.xml を選択すると以下のような Graphical Layout 画面が表示されます 3 章では画面下部の activity_main.xml タブを選択し XML コードを直接記述してレイアウトやウィジェットを配置しました この章では Graphical Layout を使って パレットからマウス操作でレイアウトやウィジェットを配置する方法を説明します

34 1. レイアウト画面 Graphical Layout タブでレイアウト画面を表示します デフォルトで表示されるレ イアウト画面は小さいので右上にあるズームボタンでレイアウト画面を拡大します

35 2. パレットレイアウトやウィジェットの候補がパレットにカテゴリ別に登録されています マウス操作で パレットからレイアウト画面にレイアウトやウィジェットを配置します レイアウト画面に配置したウィジェットは ウィジェットを選択状態にし Delete キーで削除できます

36 3. プロパティー レイアウトやウィジェットの属性 ( プロパティー ) を設定します 注 プロパティー画面が表示されていない場合はウィジェットを右クリックし 表示 - プロパティー を選択します 画面下部に表示されますので 画面の右に移すにはプ ロパティーー画面をドラッグドロップして移動します

37 5 章 activity_main.xml を使わずにレイアウトする レイアウトとそこに配置するウイジェットを記述する方法として主に以下のような 3 種類があります すでに1の方法を説明してありますので この章では2 3の方法を説明します 複数のウイジェットを配置する場合などは activity_main.xml に記述するより for 文などを用いて Java プログラムで記述した方が効率的な場合があります 1activity_main.xml にレイアウトやウイジェットを記述する 2activity_main.xml にレイアウトを記述せずに Java プログラムコード中でレイアウト やウイジェットを作成する 3activity_main.xml に記述したレイアウトに Java プログラムコードでウイジェットや ビューを追加する

38 5-1 LinearLayout を Java コードで配置 リニアレイアウトを生成し コンテントビューに設定するには次のようにします LinearLayout layout=new LinearLayout(this); layout.setorientation(linearlayout.horizontal); setcontentview(layout); ボタンを生成し テキストを設定するには次のようにします Button bt1=new Button(this); bt1.settext("1"); リニアレイアウト layout にボタン bt1 を配置するには次のようにします layout.addview(bt1,new LinearLayout.LayoutParams(WC,WC)); addview メソッドの第 2 引数には追加するウイジェットのサイズを指定します サイズ は LinearLayout.LayoutParams を使って指定します wrap_content と fill_parent を示す 定数を次のように定義しておくと便利です private final int WC=ViewGroup.LayoutParams.WRAP_CONTENT; private final int FP=ViewGroup.LayoutParams.FILL_PARENT; 例題 5-1 Button を 2 つリニアレイアウトに水平方向で配置します MainActivity.java package com.example.jlayout1; import android.app.activity; import android.os.bundle; import android.view.viewgroup; import android.widget.*; public class MainActivity extends Activity { private final int WC=ViewGroup.LayoutParams.WRAP_CONTENT;

39 @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout linearlayout=new LinearLayout(this); linearlayout.setorientation(linearlayout.horizontal); setcontentview(linearlayout); Button bt1 = new Button(this); bt1.settext("1"); linearlayout.addview(bt1,new LinearLayout.LayoutParams(WC,WC)); Button bt2 = new Button(this); bt2.settext("2"); linearlayout.addview(bt2,new LinearLayout.LayoutParams(WC,WC)); 練習問題 5-1 Button にリスナーを付け クリックしたボタンのテキストをタイトルバ ーに表示しなさい MainActivity.java package com.example.jlayout2; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.view.viewgroup; import android.widget.*; public class MainActivity extends Activity implements OnClickListener{

40 private final int public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout linearlayout=new LinearLayout(this); linearlayout.setorientation(linearlayout.horizontal); setcontentview(linearlayout); Button bt1 = new Button(this); bt1.settext("1"); bt1.setonclicklistener(this); linearlayout.addview(bt1,new LinearLayout.LayoutParams(WC,WC)); Button bt2 = new Button(this); bt2.settext("2"); bt2.setonclicklistener(this); linearlayout.addview(bt2,new LinearLayout.LayoutParams(WC,WC)); public void onclick(view view) { Button bt=(button) 1 ; settitle( 2 );

41 6 章タッチイベント タッチスクリーン ( ディスプレイ ) は指で触れて操作します 今までボタンやリスト項目などを指でタッチする動作をクリックと呼び OnClickListener で処理していました タッチスクリーンに指で触れる動作を一般にタッチとかタップと呼び 主な操作方法の呼び方は以下です 呼び方 動作 タップ 指で軽く叩く操作 マウスのクリックに相当 ダブルタップ 2 回叩く操作 マウスのダブルクリックに相当 ロングタッチ 一定時間 ( たとえば 1 秒以上 ) 画面に触れてから離す操作 ドラッグ ( スライド ) 指で押さえながら移動する操作 スクロール 指で押さえながら上下左右に移動する操作 フリング ( フリック ) リストなどをスクロールする時に指で軽くはらう操作 ピンチ 2 本指でのつまむ操作の総称 ピンチアウト 2 本指の間を広げて拡大する時の操作 ( ピンチオープン ) ピンチイン 2 本指の間を縮めて縮小する時の操作 ( ピンチクローズ )

42 6-1 タッチアクションの種類 タッチイベントが発生すると ontouchevent メソッドが呼び出されます そのとき引数 event を使って event.getaction() で発生したイベントの種類 (ACTION_DOWN ACTION_UP ACTION_MOVE) が取得できます タッチ位置の座標は event.getx() と event.gety() で float 値で取得できます public boolean ontouchevent(motionevent event) { switch (event.getaction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_MOVE: break; return super.ontouchevent(event); 例題 6-1 タッチイベントの種類とタッチ位置の x y 座標値をタイトルバーに表示しま す MainActivity.java package com.example.touch1; import android.app.activity; import android.os.bundle; import android.view.motionevent; public class MainActivity extends Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); public boolean ontouchevent(motionevent event) { String action=""; switch (event.getaction()) {

43 case MotionEvent.ACTION_DOWN: action="action_down:";break; case MotionEvent.ACTION_UP: action="action_up:";break; case MotionEvent.ACTION_MOVE: action="action_move:";break; settitle(action+event.getx()+","+event.gety()); return super.ontouchevent(event); 練習問題 6-1 タッチダウンした位置からタッチムーブ位置までの距離をタイトルバーに 表示しなさい MainActivityTouch2.java package com.example.touch2; import android.app.activity; import android.os.bundle; import android.view.motionevent; public class MainActivity extends Activity { float public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main);

44 @Override public boolean ontouchevent(motionevent event) { float distance,dx,dy; switch (event.getaction()) { case MotionEvent.ACTION_DOWN: oldx=event.getx(); oldy=event.gety(); break; case MotionEvent.ACTION_MOVE: dx= 1 dy= 2 distance=(float)math.sqrt(dx*dx+dy*dy); settitle("2 点間の距離 ="+distance); break; return super.ontouchevent(event);

45 7 章トースト ダイアログ カレントの Activity とは別画面にメッセージ表示する方法としてトーストとダイアログがあります トーストは画面下部に表示され ある時間が過ぎるとフェードアウトしていく別ウインドウです Android で使用できる標準ダイアログとして AlertDialog ProgressDialog DatePickerDialog TimePickerDialog があります ユーザが独自のカスタム トーストやカスタム ダイアログを作ることもできます

46 7-1 トースト トーストは画面下部に表示され ある時間が過ぎるとフェードアウトしていく別ウインドウです トーストは以下のようにして表示します 表示されている時間は Toast.LENGTH_LONG と Toast.LENGTH_SHORT が指定できます Toast.makeText(this," メッセージ ",Toast.LENGTH_LONG).show(); トーストは様々な局面で ちょっとした情報を表示するのに使われます 標準のトーストは 画面の下部の中央に表示されます この位置を以下のように変更することができます setgravity(gravity 定数, x 位置, y 位置 ); Gravity 定数には TOP BOTTOM CENTER LEFT RIGHT などを指定でき これらを 演算子で組み合わせて指定することもできます Gravity.TOP Gravity.LEFT とすると画面左上隅になります x,y 位置は Gravity 定数で指定した位置からの相対オフセット値になります maketext や show メソッドを別々に書くと以下のようになります Toast toast=toast.maketext(this,(++count)+" 回目 ",Toast.LENGTH_LONG); toast.setgravity(gravity.top Gravity.LEFT,0,0); toast.show(); 例題 7-1 画面のタッチでトーストを表示します その際 タッチした回数を変数 count にカウントして その値をもとに 5 回目 のように表示します MainActivity.java package com.example.toast1; import android.app.activity; import android.os.bundle; import android.view.motionevent; import android.widget.toast; public class MainActivity extends Activity { private int

47 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ Toast.makeText(this,(++count)+" 回目 ",Toast.LENGTH_LONG).show(); return super.ontouchevent(event);

48 練習問題 7-1 画面のタッチで画面の右上にトーストを表示しなさい MainActivity.java package com.example.toast2; import android.app.activity; import android.os.bundle; import android.view.gravity; import android.view.motionevent; import android.widget.toast; public class MainActivity extends Activity { private int public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ Toast toast=toast.maketext(this,(++count)+" 回目 ",Toast.LENGTH_LONG); toast.setgravity( 1 ); toast.show(); return super.ontouchevent(event);

49 8 章各種ウィジェット 3 章ウイジェットと XML で Button TextView ImageView EditText CheckBox RadioButton Spinner ListView などの基本ウィジェットについて説明しました Android にはこの他にも多くのウィジェットが用意されています この章では比較的有用で使用頻度が高い ImageButton ToggleButton CheckedTextView AnalogClock DigitalClock ProgressBar SeekBar ScrollView Gallery GridView について説明します

50 8-1 イメージボタン (ImageButton) ImageButton はテキストの代わりにイメージを表示したボタンです デフォルトではイメージボタンをクリックしてもイメージボタンの形状は変わりません <ImageButton> の属性に を指定します の定義は res/values/style.xml ファイルで行い さらに具体的なボタンを押したときのイメージ (bt1_pressed.png) と離したときのイメージ (bt1_normal.png) の指定は res/color/custom.xml で行います color フォルダを作り custom.xml の Resource Type は Color List Root Element は selector とします ボタンを強制的に押されたイメージにするには以下のようにします ibt=(imagebutton)findviewbyid(r.id.ibutton); ibt.setpressed(true); これで custom.xml の android:state_pressed="true" が指定されている <item> に記述 されているイメージがイメージボタンに表示されます ImageButton のクリック処理の方 法は Button と同じです 例題 を示すイメージボタンの押 / 離イメージを表示します activity_main.xml <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" >

51 <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" /> </LinearLayout> res/color/custom.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=" > <item android:state_pressed="true" /> <item /> </selector> res/values/style.xml <?xml version="1.0" encoding="utf-8"?> <resources> <style name="btn"> <item </style> </resources>

52 練習問題 と 2 を示すイメージボタンの押 / 離イメージを表示しなさい activity_main.xml <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" style="@style/btn1" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp" style="@style/btn2" /> </LinearLayout> res/values/style.xml <?xml version="1.0" encoding="utf-8"?> <resources> <style name="btn1"> <item name="android:background">@color/custom1</item> </style> <style name="btn2"> <item name="android:background"> 1 </item> </style> </resources> res/color/custom1.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=" > <item

53 android:state_pressed="true" /> <item /> </selector> res/color/custom2.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=" > <item android:state_pressed="true" android:drawable= 2 /> <item android:drawable="@drawable/bt2_normal" /> </selector>

54 9 章インテントとアクティビティ Andoroid アプリケーションを構成するコンポーネントとして アクティビティ サービス ブロードキャストレシーバーがあります これら 3 種類のコンポーネントを起動するのにインテントを使います この章ではインテントを使って別のアクティビティを起動する方法とアクティビティ間でデータ授受する方法を説明します さらにインテントを使ってダイアラーやメーラーを起動する方法を説明します またステータスバーへの通知 (Notification) 方法についても説明します

55 9-1 インテントとは Android では Intent クラスを使って別の Activity に状態を移すことができます インテントには動作とデータを与えます 動作 (Action) にユーザ定義クラスを指定する場合を 明示的インテント と呼びます Android が定める Action の種類を指定する場合を 暗黙的インテント と呼び 以下のような Action があります Action ACTION_VIEW ACTION_SEND ACTION_DIAL ACTION_SET_WALLPAPER ACTION_PICK 機能別画面 ( 別アクティビティ ) を表示します 指定する URI が http: なら Web ページ geo: なら GoogleMap などになります 最も一般的なアクションです インテントを使って GoogleMap の表示する方法は 15 章の 15-2 で説明します データを送ります メールの送信などに使います ダイアラーを表示します 壁紙の設定をします データから項目を選択します ギャラリーなどで使用します 英単 intent: 意図, 意向, 目的 しっかりと向けられている たとえば指定した URI の Web ページを表示するには次のようにします Uri uri = Uri.parse(" Intent it = new Intent(Intent.ACTION_VIEW,uri); startactivity(it); インテントのアクションは ACTION_VIEW データは Uri.parse(" となります このインテントを開始するには startactivity メソッドを使います

56 例題 9-1 画面のタッチで指定した URI の Web ページを表示します MainActivity.java package com.example.intent1; import android.app.activity; import android.content.intent; import android.net.uri; import android.os.bundle; import android.view.motionevent; public class MainActivity extends Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ Uri uri = Uri.parse(" Intent it = new Intent(Intent.ACTION_VIEW,uri); startactivity(it); return super.ontouchevent(event);

57 練習問題 9-1 ListView に登録してある Web ページを表示しなさい activity_main.xml <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>

58 MainActivity.java package com.example.intent2; import android.app.activity; import android.content.intent; import android.net.uri; import android.os.bundle; import android.view.view; import android.widget.*; import android.widget.adapterview.onitemclicklistener; public class MainActivity extends Activity { private String name[]={"yahoo!","google","youtube"; private String uristr[]={" public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1); ListView lv=(listview) findviewbyid(r.id.listview); for (int i=0;i<name.length;i++) adapter.add( 1 ); lv.setadapter(adapter); lv.setonitemclicklistener(new ItemClick()); class ItemClick implements OnItemClickListener { public void onitemclick(adapterview<?> parent, View view,int position, long id) { Uri uri = Uri.parse( 2 ); Intent it = new Intent(Intent.ACTION_VIEW,uri); startactivity(it);

59

60 10 章 Handler とサービス Java ではプログラムの一連の実行をスレッド (Thread) という小さい処理単位に分割し 必要に応じて実行することで複数のプログラムを同時に並列処理しているように見せることができます いままでのプログラムでは ボタンのクリックや画面のタッチなどのイベントの発生を受けて処理 ( イベントドリブン プログラム ) を行っていましたが そのようなイベントと関係なく別の仕事を行いたい場合にスレッドを用います Android でもスレッドを使用することができます ただし Android の GUI はシングルスレッドにしか対応していないため 画面の描画処理を別スレッドで実行することを禁止しています このような場合はハンドラ (Handler) を介することで裏ルートでのマルチスレッドを実現します Handler を使って一定時間ごとの処理を行うことができます アクティビティは画面に表示されている表に現れる処理です これに対してサービスやブロードキャストレシーバはアクティビティのバックグラウンドで動作する表に現れない処理です サービスは長時間かかる処理をアクティビティと独立して行う仕組みです また サービスを呼び出したアクティビティが中断されてもサービス処理を継続することができます

61 10-1 Thread と Handler Java では一般にスレッドを用いた処理は Thread クラスと Runnable インターフェースを用いて行います スレッドは start メソッドで開始します スレッドが実行されたときに行う処理は run メソッド内に記述します run メソッドは Runnable インターフェースのメソッドです Thread を生成し 開始するには以下のようにします start メソッドが実行されると run メソッドが呼び出されます new Thread(new Runnable() { public void run() { // スレッド内で行う処理内容 ).start(); ところが Android の GUI はシングルスレッドにしか対応していないため 画面の描画処理を別スレッドで実行することを禁止しています つまりアクティビティと異なるスレッドからアクティビティ画面を描画しようとすると実行時エラーとなります これを回避するにはアクティビティ内でハンドラ hd を生成しておき この hd に対し post メソッドを使って Runable オブジェクトを設定します これによりこの Runable スレッドは アクティビティと同じスレッドで実行されることになりエラーを回避できます private Handler hd; hd=new Handler(); new Thread(new Runnable() { public void run() { hd.post(new Runnable() { public void run() { // アクティビティへの描画処理 ); ).start();

62 例題 10-1 画面のタッチで 別スレッドを開始し その中でタイトルバーへの表示を行 います MainActivity.java package com.example.handler1; import android.app.activity; import android.os.bundle; import android.os.handler; import android.view.motionevent; public class MainActivity extends Activity { private Handler hd; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); hd=new Handler(); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ new Thread(new Runnable() { public void run() { hd.post(new Runnable() { public void run() { settitle(" 別スレッドからGUIにアクセス "); ); ).start(); return super.ontouchevent(event);

63 練習問題 10-1 画面のタッチで 2 つのスレッドを開始し 1 つ目のスレッドで A の 文字 2 つ目のスレッドで B の文字を TextView に表示しなさい activity_main.xml <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> MainActivity.java package com.example.handler2; import android.app.activity; import android.os.bundle; import android.os.handler; import android.view.motionevent; import android.widget.textview; public class MainActivity extends Activity { private Handler hd; TextView text1; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate);

64 setcontentview(r.layout.activity_main); hd=new Handler(); text1=(textview)findviewbyid(r.id.text1); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ new Thread(new Runnable() { public void run() { hd.post(new Runnable() { public void run() { text1.settext( 1 ); ); ).start(); new Thread(new Runnable() { public void run() { hd.post(new Runnable() { public void run() { text1.settext( 2 ); ); ).start(); return super.ontouchevent(event);

65 11 章サウンドとムービー サウンドとムービーを扱うウイジェットとして MediaPlayer と VideoView があります MediaPlayer はサウンドの演奏を行い VideoView は動画の再生を行います これらは android.widget パッケージで定義されています ウイジェットの分類ではありませんが この他にマルチメデイアを扱うクラスとして android.media パッケージの SoundPool ToneGenerator MediaRecorder android.webkit パッケージの WebView があります この章ではこれらのクラスの使用方法を説明します

66 11-1 サウンドの再生 1. 音楽ファイル形式の種類 Android の仕様では MP3/AAC/3GP/MID/WMA/IMY/OTA/OGG などに対応することになっていますが 実機に搭載されたメディアプレーヤーにより再生できるフォーマットは異なります 代表的なフォーマットとして以下があります 音楽ファイル形式 MP3 (MPEG Audio Layer-3) WMA (Windows Media Audio) 3GP (Third Generation Partnership) OGG 特徴映像データ圧縮方式の MPEG-1 で利用される音声圧縮方式 Microsoft 社が開発した Windows 標準の音声圧縮方式 3GP プロジェクト (3GPP) が定めた標準規格のファイルフォーマット Xiph.org Foundation が開発した ライセンスフリーな音声圧縮方式 2. MediaPlayer サウンドファイル (~.mp3) をリソースフォルダの res/raw に配置しておきます サウンドの再生は MediaPlayer クラスを使用して次のように行います create メソッド の第 1 引数には this または getapplicationcontext() を指定します seekto(0) で先 頭位置に設定します MediaPlayer mp; mp=mediaplayer.create(this,r.raw.sound1); mp.seekto(0); mp.start();

67 再生を停止するには次のようにします mp.stop(); mp.release(); mp=null; 例題 11-1 演奏開始 ボタンで sound1.mp3 ファイルを演奏し 演奏停止 ボタン で停止します activity_main.xml <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 演奏開始 " /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 演奏停止 " /> </LinearLayout> MainActivity.java package com.example.sound1; import android.app.activity; import android.media.mediaplayer; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener;

68 import android.widget.*; public class MainActivity extends Activity implements OnClickListener{ private MediaPlayer public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Button bt1=(button)findviewbyid(r.id.button1); bt1.setonclicklistener(this); Button bt2=(button)findviewbyid(r.id.button2); bt2.setonclicklistener(this); public void onclick(view view) { switch (view.getid()){ case R.id.button1:mp=MediaPlayer.create(this,R.raw.sound1); mp.seekto(0); mp.start(); break; case R.id.button2:if (mp!=null){ mp.stop(); mp.release(); mp=null; break;

69 練習問題 11-1 リストビューに登録された音楽ファイルを選択して演奏します res/raw フォルダにサウンドファイルとして sound1.mp3~sound3.mp3 を配置しておきま す activity_main.xml <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> MainActivity.java package com.example.sound2; import android.app.activity; import android.media.mediaplayer; import android.os.bundle; import android.view.view; import android.widget.*; import android.widget.adapterview.onitemclicklistener;

70 public class MainActivity extends Activity { private MediaPlayer public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1); adapter.add(" 序曲 "); adapter.add(" 勇者の行進 "); adapter.add(" 明日への道 "); adapter.add(" 演奏停止 "); ListView lv=(listview)findviewbyid(r.id.listview); lv.setadapter(adapter); lv.setonitemclicklistener(new ItemClick()); class ItemClick implements OnItemClickListener { public void onitemclick(adapterview<?> parent, View view,int position, long id) { int mid[]={r.raw.sound1,r.raw.sound2,r.raw.sound3; if (mp!=null){ mp.stop(); mp.release(); mp=null; if ( 1 ){ mp=mediaplayer.create(getapplicationcontext(), 2 ); mp.seekto(0); mp.start(); 注 MediaPlayer.create(getApplicationContext(),mid[position]); の第 1 引数に this を使 う場合は ItemClick メソッドを別クラスで構成しているため MainActivity.this とします

71

72 12 章アニメーション アニメーションのタイプは大きく 2 つに分類できます Tween アニメーション (Animation) と Frame アニメーション (AnimationDrawable) です Tween アニメーションは 1 つのイメージを連続に変化させるタイプで 移動 フェード 回転 拡大 縮小 それらを組み合わせて変化させます Frame アニメーションは順番にイメージを並べて表示してアニメーションにするタイプでパラパラ漫画のような表示を行います

73 12-1 Tween アニメーション XML で定義されたフェード 伸縮 移動 回転などといった変化を実行するアニメーションです Tween アニメーションを行うにはアニメーションの内容を res/anim フォルダに anim.xml として定義します アニメーション定義は <set> 要素内に <alpha> <scale> <translate> <rotate> などの アニメーション要素を記述します <set> のアニメーション要素は複数指定できます <set xmlns:android=" android:shareinterpolator="false"> <rotate android:fromdegrees="0" android:todegrees="360" android:pivotx="50%" android:pivoty="50%" android:duration="4000" /> </set> このアニメーション定義ファイルをイメージビュー iv に設定するには以下のようにしま す Tween アニメーションは android.view.animation.animation クラスを使って制御 します Animation anim=animationutils.loadanimation(this, R.anim.anime); iv.startanimation(anim);

74 1. <set> アニメーション要素 (<alpha> <scale> <translate> <rotate> ) や他の <set> 要素を 保持するコンテナです AnimationSet クラスを表します 属性 interpolator shareinterpolator 意味 Interpolator リソースへのリファレンス 子要素に同じ Interpolator を共有させる (true) させない (false) 2. <alpha> アニメーションのフェードイン フェードアウトします AlphaAnimation クラスを表します 以下の属性で不透明度を 0.0~1.0 の float 値で指定します 0.0 は透明 1.0 は不透明です 属性 意味 fromalpha 開始の不透明度 toalpha 終了の不透明度 duration アニメーション時間 ( ミリ秒 ) 以下は透明度を 0.0~1.0 まで 4000 ミリ秒の間で変化させます <alpha android:fromalpha="0.0" android:toalpha="1.0" android:duration="4000" /> 3. <scale> アニメーションの拡大 縮小を行います ScaleAnimation クラスを表します 以下の属性で拡大 縮小の倍率と中心位置を float 値で指定します 倍率の 1.0 は変化しない( 等倍 ) を意味します pivotx と pivoty が (0,0) の場合は左上隅を中心に拡大 縮小はすべて下と右に伸縮します 属性 fromxscale toxscale 意味 開始の X 倍率 終了の X 倍率

75 fromyscale 開始の Y 倍率 toyscale 終了の Y 倍率 pivotx 拡大 縮小の中心 X 座標 pivoty 拡大 縮小の中心 Y 座標 duration アニメーション時間 ( ミリ秒 ) 以下は縮尺を 1.0~0.0 まで中心を軸にして 4000 ミリ秒の間で縮小させます <scale android:fromxscale="1.0" android:toxscale="0.0" android:fromyscale="1.0" android:toyscale="0.0" android:pivotx="50%" android:pivoty="50%" android:duration="4000" /> 4. <translate> アニメーションの X 方向 Y 方向の水平移動を行います TranslateAnimation クラスを表します 以下の属性で移動量を float 値またはパーセンテージで指定します 通常の位置に対する相対ピクセル ("5" など ) 要素の幅に対する相対パーセンテージ("5%" など ) 親の幅に対する相対パーセンテージ ("5%p" など ) のいずれか一方で表現します 属性意味 fromxdelta 開始の X オフセット値 toxdelta 終了の X オフセット値 fromydelta 開始の Y オフセット値 toydelta 終了の Y オフセット値 duration アニメーション時間 ( ミリ秒 ) 以下は対象となるイメージの左端から右端まで 4000 ミリ秒の間で平行移動します <translate android:fromxdelta="0%" android:toxdelta="100%" android:duration="4000" />

76 5. <rotate> アニメーションの回転を行います RotateAnimation クラスを表します 以下の属性で回転角度と回転中心座標を float 値で指定します pivotx pivoty はパーセンテージ指定もできます 属性 意味 fromdegrees 開始位置の角度 ( 度数 ) todegrees 終了位置の角度 ( 度数 ) pivotx 回転の中心となる X 座標 pivoty 回転の中心となる Y 座標 duration アニメーション時間 ( ミリ秒 ) 以下はイメージの中央を原点として 0 ~360 まで 4000 ミリ秒の間で回転します <rotate android:fromdegrees="0" android:todegrees="360" android:pivotx="50%" android:pivoty="50%" android:duration="4000" /> 例題 12-1 イメージを回転しながら縮小します イメージは画面中央に配置します res/anim/anim.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android=" android:shareinterpolator="false" > <rotate android:fromdegrees="0" android:todegrees="360" android:pivotx="50%" android:pivoty="50%" android:duration="4000" /> <scale

77 /> </set> android:fromxscale="1.0" android:toxscale="0.0" android:fromyscale="1.0" android:toyscale="0.0" android:pivotx="50%" android:pivoty="50%" android:duration="4000" activity_main.xml <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> Anim1.java package com.example.anim1; import android.app.activity; import android.os.bundle; import android.view.motionevent; import android.view.animation.*; import android.widget.*; public class MainActivity extends Activity

78 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ ImageView iv=(imageview) findviewbyid(r.id.image); Animation anim=animationutils.loadanimation(this, R.anim.anim); iv.startanimation(anim); return super.ontouchevent(event);

79 練習問題 12-1 イメージの幅の 2 倍の距離を 0 ~360 回転しながら水平に移動しなさ い res/anim/anim.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android=" android:shareinterpolator="false" > <rotate android:fromdegrees="0" android:todegrees="360" android:pivotx="50%" android:pivoty="50%" android:duration="4000" /> <translate android:fromxdelta= 1 android:toxdelta= 2 android:duration="4000" /> </set> activity_main.xml <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/num1" /> </LinearLayout>

80 Anim2.java 例題 12-1 と同じ

81 13 章グラフィックス 2 章でグラフィックスを使った例題を説明しましたが ここでは さらに詳しくグラフィックスに関して説明します 描画を行うには 4 つの要素を使います 描画を行う Canvas 描画データを保持する Bitmap 描画の色やスタイルを決める Paint Rect や Path などの描画プリミティブです 図形をオブジェクトとして扱うための抽象クラスの Drawable を使用することもできます グラフィックスの主な操作は Canvas クラスの drawline メソッドや drawtext メソッドを使って 直線や円などの図形やテキストを描画することです この操作を補助する機能として座標変換やクリップ領域の設定があります キャンバスに描画する代わりに Path に対して仮想的に描画を行い その情報を保持しておくことができます 必要なときにその Path データを用いてキャンバスに描画することができます

82 13-1 基本図形の描画 Canvas クラスの中で 直線 点 矩形 円 楕円 円弧などの基本図形を描く描画メソ ッドを説明します 1. 座標を示すクラス 点を示すクラスとして Point(int x, int y) と PointF(float x, float y) があります 前者は int 型 後者は float 型です 座標 (x,y) を示す点は以下のように生成します PointF p=new PointF(x,y); 矩形領域を示すクラスとして Rect(int left, int top, int right, int bottom) と RectF(float left, float top, float right, float bottom) があります 前者は int 型 後者は float 型です (x1,y1) を左上隅座標 (x2,y2) を右下隅座標とする矩形領域は以下のように生成します RectF r=new RectF(x1,y1,x2,y2); 2. 色色の設定は setcolor メソッドで paint.setcolor(color.white); のように行います 色は Color.WHITE のように色を示す定数を指定する他に rgb メソッドを使って Color.rgb(red,green,blue) のように指定することもできます red,green,blue は赤 緑 青の成分を 0~255 の範囲で指定します 値が大きいほどその色の成分がでます Color.argb(alpha,red,green,blue) は透過度 alpha を 0( 完全な透明 )~255( 完全な不透明 ) で設定できます paint.setcolor(color.argb(128,0,0,255)); 3. 直線の描画 直線の描画は drawline メソッドまたは drawlines メソッドで行います canvas.drawline(x1,y1,x2,y2,paint); (x1,y1)-(x2,y2) に直線を描きます float[] p={x1,y1,x2,y2,x3,y3,x4,y4 ; canvas.drawlines(p,paint); 配列 p[ ] の 4 要素ごとに始点 終点のペアとみなして それぞれの直線を描きま

83 す つまり (x1,y1)-(x2,y2) の直線 (x3,y3)-(x4,y4) の直線 と描きます 連続した直 線を描くには {x1,y1,x2,y2,x2,y2,x3,y3 のように前の直線の終点を次の直線の始点と するようなデータにします 4. 点の描画 点の描画は drawpoint メソッドまたは drawpoints メソッドで行います canvas.drawpoint(x1,y1,paint); (x1,y1) 位置に点を描画します float[] p={x1,y1,x2,y2 ; canvas.drawpoints(p,paint); 配列 p[ ] の 2 要素ごとに (x,y) とした点を描画します 5. 矩形の描画矩形の描画は drawrect メソッドまたは drawroundrect メソッドで行います 矩形 楕円 円 円弧などを描画する際にデフォルトの描画スタイルは内部を塗りつぶすので 線だけで描画するには paint.setstyle(style.stroke); とします RectF r=new RectF(x1,y1,x2,y2); canvas.drawrect(r, paint); 左上隅を(x1,y1) 右下隅を(x2,y2) とする矩形を描きます 矩形 楕円 円弧を描くメソッドは矩形領域を示す RectF を引数にしますが drawrect は drawrect(x1,y1,x2,y2, paint) のように直接各点を引数にすることもできます RectF r=new RectF(x1,y1,x2,y2); canvas.drawroundrect(r,rx,ry,paint); 左上隅を(x1,y1) 右下隅を(x2,y2) とする矩形を描き四隅を x 方向の半径 rx,y 方向の半径 ry の丸みを付けます 6. 円 楕円 円弧 円は drawcircle メソッド 楕円は drawoval メソッド 円弧は drawarc メソッドで行 います canvas.drawcircle(x,y,r,paint); 中心 (x,y) 半径 r の円を描きます

84 RectF r=new RectF(x1,y1,x2,y2); canvas.drawoval(r,paint); (x1,y1)-(x2,y2) の矩形に内接する楕円を描きます RectF r=new RectF(x1,y1,x2,y2); canvas.drawarc(r,a1,a2,true,paint); (x1,y1)-(x2,y2) の矩形に内接する楕円の a1 ~(a1+a2) までの扇形を描きます true の代わりに false を指定すると円弧になります 角度は時計回りの方向を正とします 7. キャンバス全体を塗るキャンバス全体を指定色で塗るには drawcolor メソッドを使います キャンバスを白にするには canvas.drawcolor(color.white); とします 画面クリア動作にも使用できます 8. 画面の幅と高さ画面の幅と高さは View クラスの getwidth メソッド getheight メソッドで取得できます これらのメソッドは Gview コンストラクタ内では幅と高さが確定していないので値を取得できません ondraw メソッド内で取得します int w=getwidth(); int h=getheight(); Canvas クラスの getwidth メソッド getheight メソッドを使って次のように取得する こともできます ただしこの場合 幅は View クラスの getwidth メソッドと同じですが 高さはステータスバーとタイトルバーの高さも含んでいます int w=canvas.getwidth(); int h=canvas.getheight(); 画面サイズを別の方法で求めるには 11 章 ブラウザ (WebView) の 注 Display クラスの getwidth() と getheight() を参照

85 9. Paint クラス基本図形を描く際の表示スタイル ( 外枠だけか 塗りつぶすか ) は setstyle メソッド 点線のスタイルは setpatheffect メソッドで指定します Paint クラスの主なメソッドとして以下があります Paint クラスのメソッド setcolor(int color) setargb(int a, int r, int g, int b) setalpha(int alpha) setantialias(boolean alias) setstrokewidth(float width) setpatheffect(patheffect effect) settextsize(float textsize) setstyle(paint.style style) reset() 意味描画色を Color 値で指定 描画色を RGB とアルファ値で指定 描画色にアルファ値のみを単独で指定 アンチエイリアスを設定するかどうかを指定 true を指定すると円などが滑らかに表示されます 線の太さを指定 点線の形状を指定 描画する文字の大きさを指定 塗りつぶしか輪郭線の描画かを指定 Style として以下が指定できます FILL: 指定領域内を塗りつぶす デフォルト STROKE: 指定領域の外枠だけ描画 FILL_AND_STROKE:FILL と STROKE 動作 デフォルトの設定に戻します 例題 13-1 画面中央に十字線と円を描きます MainActivity.java package com.example.graphic1; import android.app.activity; import android.os.bundle; import android.graphics.*; import android.graphics.paint.*; import android.view.view; import android.content.context; public class MainActivity extends Activity public void oncreate(bundle savedinstancestate) {

86 super.oncreate(savedinstancestate); setcontentview(new GView(this)); private class GView extends View { private Paint paint; public GView(Context context) { super(context); paint=new Paint(); protected void ondraw(canvas canvas) { paint.setcolor(color.blue); paint.setstyle(style.stroke); int w=getwidth(); int h=getheight(); canvas.drawline(0,h/2,w,h/2,paint); canvas.drawline(w/2,0,w/2,h,paint); canvas.drawcircle(w/2,h/2,100,paint);

87 注 この章の以後の 例題 練習問題 は GView クラス内のコードのみ記述 してあります 練習問題 13-1 第 2 象限と第 4 象限に円弧を描きなさい MainActivity.java private class GView extends View { private Paint paint; public GView(Context context) { super(context); paint=new Paint(); protected void ondraw(canvas canvas) { paint.setcolor(color.blue); paint.setstyle(style.stroke); int w=getwidth(); int h=getheight(); canvas.drawline(0,h/2,w,h/2,paint); canvas.drawline(w/2,0,w/2,h,paint); RectF rect=new RectF(w/2-100,h/2-100,w/2+100,h/2+100); canvas.drawarc(rect, 1,false,paint); canvas.drawarc(rect, 2,false,paint); 注 RectF rect=new RectF(w/2-100,h/2-100,w/2+100,h/2+100); は警告エラーとなりま す 練習問題 6-3 参照

88

89 14 章ファイル処理 Android はファイルを作成することができる権限を持つ特別なフォルダに対しファイルの読み書きが行えます このフォルダにユーザは直接ファイルを置くことはできませんが プロジェクトの assets フォルダにファイルを配置しておき そのファイルを読みだすことができます また SD カードへのファイルの読み書きを行うこともできます ファイルへの読み書きにはバイナリー ストリームとテキスト ストリームという手法があります ファイルに対する読み書きの方法や ファイル名リストの取得方法やフォルダの操作方法を説明します

90 14-1 バイナリー ストリーム バイナリー ストリームは FileInputStream/FileOutputStream クラスの read/write メソッドを使ってバイト単位の読み書きを行います ファイルへの書き込みは FileOutputStream クラスを使用し openfileoutput メソッドでファイルを開きます ファイルへの書き込みは write メソッドで行います 引数は文字列を getbytes でバイト配列に変換したものを指定します close メソッドでファイルを閉じて完了です FileOutputStream out=openfileoutput("test.dat",mode_private); String msg=" 書き出すテキスト "; out.write(msg.getbytes()); out.close(); openfileoutput で指定できるファイルモードには以下が指定できます ファイルモード 機能 MODE_APPEND 既にファイルがあった場合 追加で開く MODE_PRIVATE 他のアプリからアクセスできない private file として生 成 MODE_WORLD_READABLE 他のアプリへ読み込み権限を与える MODE_WORLD_WRITEABLE 他のアプリへ書き込み権限を与える ファイルからの読み込みは FileInputStream クラスを使用し openfileinput メソッドで ファイルを開きます ファイルからの読み込みは read メソッドで行います 引数はバイト 配列を指定します close メソッドでファイルを閉じて完了です FileInputStream in=openfileinput("test.dat"); byte[] dat = new byte[in.available()]; in.read(dat); in.close();

91 例題 14-1 書き込み ボタンで EditText に入力したテキストを test.dat ファイルに書 き込み 読み出し ボタンで test.dat ファイルからデータを読み出し TextView に表示し ます activity_main.xml <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 書き込み " /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 読み出し " /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>

92 MainActivity.java package com.example.file1; import java.io.*; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.*; public class MainActivity extends Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Button bt1=(button)findviewbyid(r.id.read); bt1.setonclicklistener(new Read()); Button bt2=(button)findviewbyid(r.id.write); bt2.setonclicklistener(new Write()); class Read implements OnClickListener { public void onclick(view v) { try { FileInputStream in=openfileinput("test.dat"); byte[] dat=new byte[in.available()]; in.read(dat); TextView textview=(textview)findviewbyid(r.id.textview); textview.settext(new String(dat)); in.close(); catch (IOException e) { class Write implements OnClickListener { public void onclick(view v) { try { FileOutputStream out=openfileoutput("test.dat",mode_private);

93 EditText edittext=(edittext)findviewbyid(r.id.edittext); String msg=edittext.gettext().tostring(); out.write(msg.getbytes()); out.close(); catch (IOException e) {

94 練習問題 14-1 例題 14-1 と同じことを追加書き込みモードで行いなさい activity_main.xml 例題 14-1 と同じ MainActivity.java package com.example.file2; import java.io.*; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.*; public class MainActivity extends Activity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Button bt1=(button)findviewbyid(r.id.read); bt1.setonclicklistener(new Read()); Button bt2=(button)findviewbyid(r.id.write); bt2.setonclicklistener(new Write()); class Read implements OnClickListener { public void onclick(view v) { try { FileInputStream in=openfileinput("test.dat"); byte[] dat=new byte[in.available()]; in.read(dat); TextView textview=(textview)findviewbyid(r.id.textview); textview.settext(new String(dat)); in.close(); catch (IOException e) {

95 class Write implements OnClickListener { public void onclick(view v) { try { FileOutputStream out=openfileoutput("test.dat", 1 ); EditText edittext=(edittext)findviewbyid(r.id.edittext); String msg=edittext.gettext().tostring(); out.write(msg.getbytes()); out.close(); catch (IOException e) {

96 15 章 GoogleMap GoogleMap を Android で使用するには Android Maps API Key を取得する必要があ ります またプロジェクトの作成に当たっては通常のプロジェクトとは以下の点が異なり ます Google APIs ライブラリのインストール ( 一度設定すればよい ) map 用 AVD の生成 ( 一度設定すればよい 実機では必要ない ) ビルド ターゲットに Google APIs を指定 ( その都度指定 ) GoogleMap を利用してできることは以下のようなものです この章ではこれらの使用方 法を説明します 地図( 通常の地図 衛星写真 交通情報 ) の表示 マップコントローラによる位置やズームの制御 ロケーション API による現在位置の取得 オーバーレイ機能( 本書では説明しません )

97 15-1 Android アプリから GoogleMap を使うのに必要なもの 1. Android Maps API Key の取得 1~2の手順で行ってください 場合によっては Google のアカウント (gmail のアカウントと同じ ) が必要になる場合もあります 1 証明書のフィンガープリント (MD5) の取得 JDK をインストールしたフォルダの bin フォルダにある keytool で 証明書のフィンガ ープリント (MD5) を表示します >keytool -list -keystore XXX.android debug.keystore 注 JDK はたとえば以下のようなフォルダにインストールされていますので カレント ディレクトリを bin フォルダに移してから keytool コマンドを実行します C: Program Files Java jdk1.6.0_07 bin 注 XXX.android debug.keystore は KEYSTORE ファイルへのパスです XXX は OS により以下のようになります WindowsXP C: Documents and Settings ユーザ名 WindowsVista/7 C: Users ユーザ名 Mac/Linux ~/.android/debug.keystore

98 パスワードを聞かれますので そのままリターンキーを押すと 証明書のフィンガープリント (MD5) が表示されます この値( たとえば XX:XX:XX:XX:80:B5:12:59:FA:BC:F1:E8:D9:59:XX:XX ) を Maps API Key の取得の際に使います 注 従来の署名アルゴリズムは MD5 でしたが よりセキュリティレベルの高い SHA1 に移行しつつあります JDK1.7 の keytool コマンドで取得できるデフォルトの証明書のフィンガープリントは SHA1 です MD5 の証明書のフィンガープリントを取得するには -v オプションを指定します >keytool -list -v -keystore XXX.android debug.keystore

99 2Maps API Key の取得 Google の で示す Web ページを開きます チェックとフィンガープリント (MD5) を入力します 注 Maps API Key の取得の Web ページの URL は変更されることがあります 以前の URL は でした

100 以下の MapView を示す XML テキストが得られますので これを activity_main.xml に 指定します <com.google.android.maps.mapview android:layout_width="fill_parent" android:layout_height="fill_parent" android:apikey="0o4fkqewz-4uvmj7uee9ifuqgmepbsy6sc_qyda" /> 注 Android Maps API Key を開発環境で使用する場合 有効期限があります 有効期限が過ぎた後で プロジェクトを修正してコンパイルし直した場合 Map は表示されません 修正しないものは再コンパイルしても表示されます 有効期限が過ぎた場合は1 2の処理をやり直して新しい Android Maps API Key を取得してください 2. Google APIs ライブラリのインストール Eclipse の ウインドウ - Android SDK および AVD マネージャー を選択します Available packages を選択し Third party Add-ons をチェックし Google APIs 関連をチェックしインストールします

101 3. Map プロジェクトの作成 Map アプリは MapActivity クラスを継承します Map の表示は MapView に対し て行います 以下の 1~6 の手順でプロジェクトを作成します 1 ビルド ターゲットに Google APIs を選択 または

102 2map 用 AVD の生成 ( 一度だけ ) ウインドウ - Android SDK および AVD マネージャー を選択 または

103 3 マニフェストにライブラリとパーミションを設定 下線部を追加します <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" <uses-permission android:name="android.permission.internet"/> <application </activity> <uses-library android:name="com.google.android.maps"/> </application> </manifest> 4activity_main.xml の記述 マップを表示するウイジェットに <com.google.android.maps.mapview> を指定します apikey に先に取得してある Android Maps API Key を指定します activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.google.android.maps.mapview android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apikey="0o4fkqewz-4w1zt7v14-vmp3wndgr8ww9nya5vg " />

104 </LinearLayout> 5Java ソースコードの記述地図を表示するだけなら MapView を置いてある activity_main.xml を setcontentview(r.layout.activity_main); で表示するだけでよいです MapActivity クラスでは isroutedisplayed メソッドを実装しなければいけません ルート情報を表示する場合は true を そうでない場合は false を返します ただし Android Maps には走行方向が分かる機能が用意されているわけではないので こうしたルート情報は自前で実装しなければなりません 従って通常は false を返すだけの処理となります 6 実行 通常の実行で MapAVD が起動しない場合は Run Configurations( 実行の構成 ) を選択 します Target で通常の AVD かマップ用の MapAVD かを選択します

105 例題 15-1 単に地図表示だけをします 地図の位置を指定していないので デフォルト 位置が採用されます エミュレータではアメリカ 実機では日本です マニフェスト(AndroidManifest.xml) <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" <uses-permission android:name="android.permission.internet"/> <application <activity </activity> <uses-library android:name="com.google.android.maps"/> </application> </manifest> activity_main.xml <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.google.android.maps.mapview android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apikey="0o4fkqewz-4uvmj7uee9ifuqgmepbsy6sc_qyda" /> </LinearLayout>

106 Map1.java package com.example.map1; import com.google.android.maps.mapactivity; import android.os.bundle; public class MainActivity extends MapActivity public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); protected boolean isroutedisplayed() { return false; エミュレータ 実機

107 16 章センサーとカメラ ( 実機のみ ) Android 端末には各種センサーが搭載されています 加速度センサ 磁界 ( 磁気 ) センサ 方位センサ ジャイロセンサ 輝度 ( 照度 ) センサ 圧力センサ 温度センサ 近接センサなどです どのセンサーが使えるかは実機ごとに異なります センサーを使用できるようにするには センサーマネージャーを使って 使用したいセンサーを取得します さらに取得したセンサーにリスナーを付けセンサーの変化で処理を行います この章では方位センサーと加速センサーの使用方法を説明します Android のカメラ機能は Camera クラスのオブジェクトを使用してプレビュー オートフォーカス 撮影といった動作を行います カメラのプレビュー画面は SurfaceView に表示します プレビュー オートフォーカス 撮影という動作は Camera クラスのメソッドで行うことができます 撮影した画像は内部メモリに保存されていますので 実際のファイルとして保存するのはユーザが別途コードを書かなければなりません このようなカメラの撮り方や画像の保存方法 フォーカスの設定方法などの基本処理と撮影した写真に日付をプリントする方法を説明します

108 16-1 方位センサー 方位センサー (Sensor.TYPE_ORIENTATION) は端末が置かれている向きを 方位 ( 東 西南北 ) ピッチ ( 表裏 ) ロール ( 縦横 ) の 3 方向で調べます 1. getsensorlist と getdefaultsensor センサーを使用できるようにするには SensorManager を使ってセンサーマネージャー sm を取得します SensorManager sm=(sensormanager)getsystemservice(sensor_service); センサーマネージャー sm からセンサーオブジェクトを取得するには getsensorlist メソッドを使う方法と getdefaultsensor メソッドを使う方法があります getsensorlist メソッドは要求されたタイプのセンサーを全て Sensor リストに取得します たとえば 方位センサーが複数の種類組み込まれている場合などです この中から希望するものを選んで使用することができます たいがい sensors.get(0); で取得する第 1 番目のセンサを使用します これに対し getdefaultsensor メソッドは第 1 番目 ( デフォルト ) のセンサーを単純に取得します 従って List<Sensor> sensors =sm.getsensorlist(sensor.type_orientation); if (sensors.size()>0) { Sensor sensor=sensors.get(0); と Sensor sensor=sm.getdefaultsensor(sensor.type_orientation); は同じです 2. センサーリスナーの設定 取得したセンサーマネージャー sm に反応するリスナーを registerlistener メソッドで設 定します sm.registerlistener(this,sensor,sensormanager.sensor_delay_normal);

109 registerlistener メソッドの第 3 引数はセンサーを呼び出す感度 ( 次に呼び出すまでの遅 延時間 ) で以下の 4 種類が指定できます () 内の遅延時間は目安です センサー感度 ( 遅延時間 ) 意味 SENSOR_DELAY_FASTEST 高速 ( 遅延時間 0 ミリ秒 ) SENSOR_DELAY_GAME ゲーム用 ( 遅延時間 20 ミリ秒 ) SENSOR_DELAY_UI ユーザインターフェース用 ( 遅延時間 60 ミリ秒 ) SENSOR_DELAY_NORMAL ノーマル ( 遅延時間 200 ミリ秒 ) SensorEventListener リスナーをインプリメントした場合に実装しなければならないメ ソッドは以下です SensorEventListener のメソッド onsensorchanged onaccuracychanged 意味 センサーの値が変わった時に呼び出されます センサーの精度が変わった時に呼び出されます 使用できるようになったセンサーの状態が変化すると onsensorchanged メソッドが呼 び出されます public void onsensorchanged(sensorevent event) { if (event.sensor.gettype()==sensor.type_orientation) { 引数の event.value[0] event.value[1] event.value[2] でセンサーの各種値を取得できま す たとえば方位センサの場合の値の意味は以下のようになります 値意味 values[0] 方位 (z 軸回りの回転角度 ) で 0~359 0: 北 90: 東 180: 南 270: 西 values[1] ピッチ (x 軸回りの回転角度 ) で-180~+180 上向き水平 :0 縦長正立:-90 裏向き:-180(+180) 縦長逆立:90 values[2] ロール (y 軸回りの回転角度 ) で-90~+90 水平 :0 右肩上:90 左肩上:-90

110 例題 16-1 方位センサの方位 ピッチ ロールの各値をタイトルバーに表示します MainActivity.java package com.example.sensor1; import android.app.activity; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; import android.os.bundle; public class MainActivity extends Activity implements SensorEventListener { private SensorManager public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); sm=(sensormanager)getsystemservice(sensor_service); Sensor sensor=sm.getdefaultsensor(sensor.type_orientation); sm.registerlistener(this,sensor,sensormanager.sensor_delay_normal); public void onsensorchanged(sensorevent event) { String result=""; if (event.sensor.gettype()==sensor.type_orientation) { result="orientation:"+event.values[0]; result+= ",Pitch:"+event.values[1]; result+= ",Roll:"+event.values[2]; settitle(result); public void onaccuracychanged(sensor arg0, int arg1) {

111 注 Android 4.2 では Sensor.TYPE_ORIENTATION は非推奨です 上の結果は机の上に表向き水平に東の方向に向けて実機を置いた状態です タイトルバーに表示しきれない場合は Orientation O のように文字数を減らしてください

112 17 章音声合成 Android の音声合成 ( テキストの読み上げ ) は TextToSpeech engine(tts エンジン ) を用いて行います 主な手順は以下です 読み上げる音程や読み上げ速度を変更すること もできます TTS エンジン リソースの生成 言語の設定 読み上げをする文章を指定して speak メソッドを呼び出す TTS エンジン リソースの解放 読み上げることができる言語は英語 フランス語 ドイツ語 イタリア語 スペイン語 など ( 機種依存します ) で 日本語は機種によりサポートされていません 音声合成はエミュレータ上でも確認できます

113 17-1 英語テキストを発音する TextToSpeech クラスの TTS エンジン リソース ts を生成し OnInitListener をインプリメントし oninit でテキスト読み上げの準備を行い setspeechrate メソッドで読み上げます 1. テキスト読み上げの準備 以下のようにして TTS エンジン リソース ts を生成します TextToSpeech ts=new TextToSpeech(this,this); OnInitListener をインプリメントし oninit でテキスト読み上げの準備を行います status に TextToSpeech.SUCCESS が返されれば成功です 成功したら setlanguage で読み上げを行う言語を指定します 言語には Locale.ENGLISH や Locale.FRENCH を指定できます Locale.JAPANESE は機種によりサポートされていません public void oninit(int status) { if (status==texttospeech.success){ Locale locale=locale.english; if (ts.islanguageavailable(locale)>=texttospeech.lang_available) ts.setlanguage(locale); else // この言語は未サポートです else // 音声合成できません 2. テキスト読み上げ たとえば Good morning を読み上げるには speak メソッドを使い以下のようにします if (ts.isspeaking()) ts.stop(); ts.setspeechrate(1.0f); ts.speak("good morning",texttospeech.queue_flush,null);

114 キューモードは以下の通りです 読上げ速度は setspeechrate メソッドで 0.1~2.0 の値を指定します TextToSpeech のキューモード QUEUE_ADD QUEUE_FLUSH 機能 再生キューへエントリを追加 再生待ちのエントリをドロップしてエントリを実行 TextToSpeech クラスの主なメソッドとして以下があります boolean isspeaking() TTS エンジンが話中なら true を返します int playearcon(string earcon, int queuemode, HashMap<String, String> params) earcon で示す通知音を出します queuemode は QUEUE_ADD または QUEUE_FLUSH を指定します int playsilence(long durationinms, int queuemode, HashMap<String, String> params) durationinms で示すミリ秒の無音 ( サイレント ) を出します queuemode は QUEUE_ADD または QUEUE_FLUSH を指定します int setlanguage(locale loc) loc で示すロケールの言語に設定します int setpitch(float pitch) 声の高さを指定します pitch には 0.1~2.0 の範囲を指定します 1.0 がノーマルのデフ ォルト int setspeechrate(float speechrate) 読上げ速度を指定します speechrate には 0.1~2.0 の範囲を指定します 1.0 がノーマ ルのデフォルト void shutdown() TTS エンジン リソースを解放します int speak(string text, int queuemode, HashMap<String, String> params) text で示すテキストを読み上げます queuemode は QUEUE_ADD または QUEUE_FLUSH を指定します

115 int stop() 読み上げを停止します 3. TTS エンジン リソースの解放 使用している TTS エンジン リソースの ts を Activity の終了で解放します protected void ondestroy(){ super.ondestroy(); if (ts!=null) ts.shutdown(); TTS エンジンは非同期で動作しているので Activity がバックグラウンドに回っても読 み上げは続きます バックグラウンドに回ったら TTS エンジン リソースを解放し読み上 げを終了するには ondestroy メソッドでなく onpause メソッドで解放処理を行います protected void onpause () { super.onpause (); if (ts!=null) ts.shutdown(); 例題 17-1 Good morning を英語で読み上げます MainActivity.java package com.example.speech1; import java.util.locale; import android.app.activity; import android.os.bundle; import android.speech.tts.texttospeech; import android.speech.tts.texttospeech.oninitlistener; import android.view.motionevent; import android.widget.*; public class MainActivity extends Activity implements OnInitListener{ private TextToSpeech

116 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ts=new TextToSpeech(this,this); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ String txt="good morning"; if (ts.isspeaking()) ts.stop(); ts.setspeechrate(1.0f); ts.speak(txt,texttospeech.queue_flush,null); return super.ontouchevent(event); public void oninit(int status) { if (status==texttospeech.success){ Locale locale=locale.english; if (ts.islanguageavailable(locale)>=texttospeech.lang_available) ts.setlanguage(locale); else Toast.makeText(this," この言語は未サポートです ",Toast.LENGTH_LONG).show(); else Toast.makeText(this," 音声合成できません ",Toast.LENGTH_LONG).show(); protected void ondestroy(){ super.ondestroy(); if (ts!=null) ts.shutdown();

117 18 章音声認識 ( 実機のみ ) Android で音声認識を使用するには android.speech パッケージの RecognizerIntent クラスを使用します RecognizerIntent は音声認識ライブラリをインテント経由で使用するためのクラスです このインテントを実行すると音声認識プロンプトが表示されますので マイクに向かって話しかけると音声認識が実行されます 音声認識を行った後 そのデータを使って行える処理は以下の 2 つです 認識された音声を文字列として取得することができます (ACTION_RECOGNIZE_SPEECH) 認識された音声を使用してウェブ検索した結果が 画面表示されます (ACTION_WEB_SEARCH) 音声認識の言語は日本の機種ではデフォルトで日本語ですが 英語やフランス語での入力もできます Android の音声認識機能は 端末とサーバとで処理を分担する分散型音声認識 (DSR:Distributed Speech Recognition) と呼ばれる方式です このため, 音声認識機能を使用する際にはサーバに接続するために 3G または WiFi が有効である必要があります マニフェストに記述する必要はありません

118 18-1 音声入力した言葉をトーストで表示 1. 音声認識インテント音声認識インテントの種類として以下の 2 つがあります 音声認識をし 認識された音声を文字列として取得するには次のようなインテントを生成します Intent it=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); RecognizerIntent の種類 ACTION_RECOGNIZE_SPEECH ACTION_WEB_SEARCH 意味認識された音声を文字列として取得することができます 認識された音声を使用してウェブ検索した結果が 画面表示されます このインテントに対し putextra で付加情報を設定します 設定できる付加情報として以 下があります putextra で設定できる付加情報意味 EXTRA_LANGUAGE_MODEL 音声モデル 必須の項目で以下の 2 つの定数が指定できます LANGUAGE_MODEL_FREE_FORM 自由形式音声認識に基づく言語モデル LANGUAGE_MODEL_WEB_SEARCH Web サーチ用語に基づく言語モデル EXTRA_LANGUAGE 認識する言語を文字列で指定します 日本の機種のデフォルトは日本語 以下のような文字列を指定 Locale.JAPANESE.toString() Locale.ENGLISH.toString() Locale.FRENCH.toString() など EXTRA_PROMPT 音声認識プロンプトに表示するユーザメッセージを文字列で指定します EXTRA_MAX_RESULTS 結果の最大数を整数値で指定します 指定しなければ 1 つ Android 4.2 以後は指定しなければ複数

119 音声モデルに LANGUAGE_MODEL_FREE_FORM を指定し ユーザメッセージを指定 してインテントを発行するには以下のようにします ICode はインテントの ID でインテン トの結果を処理する onactivityresult メソッドで照合用に使います it.putextra(recognizerintent.extra_language_model,recognizerintent.la NGUAGE_MODEL_FREE_FORM); t.putextra(recognizerintent.extra_prompt," 何かお話してね!"); it.putextra(recognizerintent.extra_max_results,1); startactivityforresult(it,icode); 注 Android 4.2 以後は 1 つだけの結果を得たい場合は結果の最大数を明示的に 1 に 設定しなければなりません it.putextra(recognizerintent.extra_max_results,1); 2. 結果の取得音声認識インテントで表示される音声入力プロンプトに対し音声入力を行い 一定の無音状態が続くと onactivityresult メソッドが呼ばれ 入力結果が引数の data に返されます data.getstringarraylistextra(recognizerintent.extra_results); で入力音声が日本語テキストの配列リストとして取得できます protected void onactivityresult(int requestcode, int resultcode, Intent data) { if (requestcode==icode && resultcode==result_ok) { String msg=""; ArrayList<String> results = data.getstringarraylistextra(recognizerintent.extra_results); for (int i=0;i<results.size();i++) { msg+=results.get(i); Toast.makeText(this,msg,Toast.LENGTH_LONG).show(); super.onactivityresult(requestcode, resultcode, data);

120 例題 18-1 タッチで音声認識インテントを呼び出し 入力した音声を文書にしてトース トで表示します MainActivity.java package com.example.recogn1; import java.util.arraylist; import android.app.activity; import android.content.activitynotfoundexception; import android.content.intent; import android.os.bundle; import android.speech.recognizerintent; import android.view.motionevent; import android.widget.toast; public class MainActivity extends Activity { private int ICode=0; // public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); public boolean ontouchevent(motionevent event) { if (event.getaction()==motionevent.action_down){ try { Intent it=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); it.putextra(recognizerintent.extra_language_model,recognizerintent.language_m ODEL_FREE_FORM); it.putextra(recognizerintent.extra_prompt," しゃべったことをToast で表示するよ!"); it.putextra(recognizerintent.extra_max_results,1); startactivityforresult(it,icode); catch (ActivityNotFoundException e) { return super.ontouchevent(event);

121 protected void onactivityresult(int requestcode, int resultcode, Intent data) { if (requestcode==icode && resultcode==result_ok) { String msg=""; ArrayList<String> results=data.getstringarraylistextra(recognizerintent.extra_results); for (int i=0;i<results.size();i++) { msg+=results.get(i); Toast.makeText(this,msg,Toast.LENGTH_LONG).show(); super.onactivityresult(requestcode, resultcode, data);

122 19 章リバーシーゲーム リバーシーゲームを以下のような段階を追って作ります 1. 盤面を作る 2. 黒石を置く 3. 盤面の情報を配列に置く 4. 黒番白番で交互に置く 5. 石を置ける位置かどうかチェック 6. 自動的に反転する 7. コンピュータが手を打つ 8. コンピュータに戦略を持たせる 9. 完成版 Reversi1.java を元に例題が進むごとに前の例題に対し 追加または変更された箇所を赤 色で区別します

123 19-1 盤面を作る 8 8 のマスに 3 種類のイメージを配置します 配置する ImageView には左上隅の 1~ 右 下隅隅の 64 の通し番号 (ID) を割り当てます green.jpg white.jpg black.jpg 緑 ( 石を置いていない状態 ) のイメージファイル 白を置いた状態のイメージファイル 黒を置いた状態のイメージファイル LinearLayout の child に横 8 個の ImageView を配置し main に縦方向に 8 段配置します ImageView の ID は (i-1)*8+j という式を使います i と j が 1~8 まで変化する間に 1~64 の番号が作られます ID の 28 と 37 は白 29 と 36 は黒 その他は緑とします イメージリソースは WVGA 画面では ピクセルを drawable-hdpi HVGA 画面では ピクセルを drawable-mdpi に置きます 画面密度が異なっても対応できるようにイメージのサイズは WH=green.getWidth(); で取得し 取得した WH の値で ImageView のサイズを設定します for (int i=1;i<=8;i++){ child = new LinearLayout(this); child.setorientation(linearlayout.horizontal); for (int j=1;j<=8;j++){ ImageView iv=new ImageView(this); iv.setid((i-1)*8+j); child.addview(iv,new LinearLayout.LayoutParams(WH,WH));

124 main.addview(child,new LinearLayout.LayoutParams(WC,WC)); 例題 19-1 MainActivity.java package com.example.reversi1; import android.app.activity; import android.content.res.resources; import android.graphics.*; import android.os.bundle; import android.view.*; import android.widget.*; public class MainActivity extends Activity { private int WC=ViewGroup.LayoutParams.WRAP_CONTENT; private int public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); Resources r=getresources(); Bitmap green=bitmapfactory.decoderesource(r,r.drawable.green); Bitmap white=bitmapfactory.decoderesource(r,r.drawable.white); Bitmap black=bitmapfactory.decoderesource(r,r.drawable.black); WH=green.getWidth(); LinearLayout main=new LinearLayout(this); main.setorientation(linearlayout.vertical); main.setpadding(0,wh,0,0); setcontentview(main); LinearLayout child; for (int i=1;i<=8;i++){ child = new LinearLayout(this); child.setorientation(linearlayout.horizontal); for (int j=1;j<=8;j++){ ImageView iv=new ImageView(this);

125 if (i==4 && j==4 i==5 && j==5){ iv.setimagebitmap(white); else if (i==4 && j==5 i==5 && j==4){ iv.setimagebitmap(black); else { iv.setimagebitmap(green); iv.setid((i-1)*8+j); child.addview(iv,new LinearLayout.LayoutParams(WH,WH)); main.addview(child,new LinearLayout.LayoutParams(WC,WC));

126 著者略歴河西朝雄 ( かさいあさお ) 山梨大学工学部電子工学科卒 (1974 年 ) 長野県岡谷工業高等学校情報技術科教諭 長野県松本工業高等学校電子工業科教諭を経て 現在は カサイ. ソフトウエアラボ 代表 主な著書 入門ソフトウエアシリーズC 言語 同シリーズJava 言語 同シリーズC++ 入門新世代言語シリーズVisualBasic4.0 同シリーズDelphi2.0 やさしいホームページの作り方シリーズHTML 同シリーズJavaScript 同シリーズHTML 機能引きテクニック編 同シリーズホームページのすべてが分かる事典 同シリーズiモード対応 HTMLとCGI 同シリーズiモード対応 Javaで作るiアプリ 同シリーズ VRML2.0 チュートリアル式言語入門 VisualBasic.NET はじめてのVisualC#. NET C 言語用語辞典 ほか ( 以上ナツメ社 ) 構造化 BASIC Microsoft Language シリーズ Microsoft VISUAL C++ 初級プログラミング入門上 下 同シリーズ VisualBasic 初級プログラミング入門上 下 C 言語によるはじめてのアルゴリズム入門 Java によるはじめてのアルゴリズム入門 VisualBasic によるはじめてのアルゴリズム入門 VisualBasic6.0 入門編 中級テクニック編 上級編 Internet Language 改訂新版シリーズホームページの制作 同シリーズ JavaScript 入門 同シリーズ Java 入門 New Language シリーズ標準 VisualC++ プログラミングブック 同シリーズ標準 Java プログラミングブック VB.NET 基礎学習 Bible 原理がわかるプログラムの法則 プログラムの最初の壁 河西メソッド :C 言語プログラム学習の方程式 基礎から学べる VisualBasic2005 標準コースウエア 基礎から学べる JavaScript 標準コースウエア 基礎から学べる C 言語標準コースウエア 基礎から学べる PHP 標準コースウエア なぞりがき C 言語学習ドリル C 言語標準ライブラリ関数ポケットリファレンス [ANSI C,ISO C99 対応 ] C 言語標準文法ポケットリファレンス [ANSI C,ISOC99 対応 ] ほか( 以上技術評論社 )

127 Android プログラミング完全入門 2014 年 6 月 1 日初版第 1 刷発行著者 = 河西朝雄発行者 = 河西朝雄発行所 =カサイ. ソフトウエアラボ長野県茅野市ちの 813 TEL デザイン = 河西朝樹 本書の一部または全部を著作権法の定める範囲を超え 無断で複写 複製 転載 あるいはファイルに落とすことを禁じます 本書に記載された内容は 情報の提供のみを目的としています したがって 本書を用いた運用は 必ずお客様自身の責任と判断によって行ってください これらの情報の運用の結果について 発行者および著者はいかなる責任も負いません 定価 =1,620 円 ( 税込 ) 2014 河西朝雄

MasterDetailFlow SettingsActivity 2. Android Lint Checks 以前のバージョンよりコンパイルのチェックが厳しくなりました このような厳しいチェックを Android Lint Checks と言います Abdroid プログラミング Bible で

MasterDetailFlow SettingsActivity 2. Android Lint Checks 以前のバージョンよりコンパイルのチェックが厳しくなりました このような厳しいチェックを Android Lint Checks と言います Abdroid プログラミング Bible で Android 4.2 の注意事項 この記事を書く上で Android プログラムをチェックしている開発環境は以下です Android SDK android-sdk_r21.0.1-windows Eclipse Eclipse 4.2 Juno( 英語版 ) 1. プロジェクト作成時にアクティビティの種類を選べるようになりました Android 4.2 では以下の 5 種類のアクティビティを選択できるようになりました

More information

Android PC OS Linux Android AndroidJava XML Android ipone ipad ipone VS Android ipone OS ios Objective-C Android Java Objective-C Java Java Android An

Android PC OS Linux Android AndroidJava XML Android ipone ipad ipone VS Android ipone OS ios Objective-C Android Java Objective-C Java Java Android An Android 2.x / 4.x A n d r o i d B i b l e 1,000 Android PC OS Linux Android AndroidJava XML Android ipone ipad ipone VS Android ipone OS ios Objective-C Android Java Objective-C Java Java Android Android

More information

ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集

ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集 BMI 計算アプリ身長と体重をユーザが入力し, その値を計算して,BMI 値を表示するアプリケーションを作る. 1. プロジェクトを作る新規 Android アプリケーション プロジェクトを作る.HelloWorld アプリケーションをつくるときと同じで良いが, アプリケーション名, プロジェクト名, パッケージ名は以下のように設定する. 図 1 新規アプリケーションの設定をする 2. レイアウトを設定する

More information

補足資料 インテントによるアプリケーションとアクティビティの呼出し Android アプリのキモとなるインテントとは何? インテント ( 呼び出し要求 ) とは Android 独自の機能です 簡単にいえばアプリケーションや他のアクティビティを呼び出す機能ですが 他のアプリケーションを機能や扱えるデ

補足資料 インテントによるアプリケーションとアクティビティの呼出し Android アプリのキモとなるインテントとは何? インテント ( 呼び出し要求 ) とは Android 独自の機能です 簡単にいえばアプリケーションや他のアクティビティを呼び出す機能ですが 他のアプリケーションを機能や扱えるデ 補足資料 インテントによるアプリケーションとアクティビティの呼出し Android アプリのキモとなるインテントとは何? インテント ( 呼び出し要求 ) とは Android 独自の機能です 簡単にいえばアプリケーションや他のアクティビティを呼び出す機能ですが 他のアプリケーションを機能や扱えるデータ型式で 検索 して呼び出すことができるものです たとえば ウェブブラウザを呼び出したい場合 View

More information

Taro-korattsu.jtd

Taro-korattsu.jtd ------------------------------------------------------------------------ No29 数字 ( テキスト ) を入力して計算方法 3x+1の問題 ( コラッツの問題 ) Ver2 Copyright( C) K.Niwa 2014.08.10 ------------------------------------------------------------------------

More information

2 // TODO Auto-generated method stub float x = event.getx(); float y = event.gety(); String action = ""; switch(event.getaction()) { case MotionEvent.

2 // TODO Auto-generated method stub float x = event.getx(); float y = event.gety(); String action = ; switch(event.getaction()) { case MotionEvent. 1 タッチイベントを取得する タッチパネルを操作すると, タッチイベントが ACTION_DOWN ACTION_MOVE( 繰返し ) ACTION_UP の順に発生する. このタッチイベントを取得するには, ontouchevent メソッドをオーバーライドする. また, dispatchtouchevent メソッドをオーバーライドしても, 同様の情報を取得することができる. dispatchtouchevent

More information

Hello, Android

Hello, Android HELLO, ANDROID Android ハンズオンセミナー Eclipse で作成するプロジェクトのひな型が Hello, Android のプロジェクトになっ ています 新しいプロジェクトを作成しながら 内部の構造を確認していきましょう 木南英夫 2009/08/06 HELLO, ANDROID Android ハンズオンセミナー ECLIPSE で新規のプロジェクトを作成する 新規のプロジェクトを作成します

More information

Prog2_2nd

Prog2_2nd 2016 年 10 月 6 日 ( 木 ) 実施 アクティビティアクティビティとは Android アプリのユーザインターフェイスの中で, 画面と関連付けられている最も基本的なのものがアクティビティ (Activity) である 複数の画面を利用するアプリには, それぞれの画面に対応したアクティビティが必要となる アクティビティは oncreateメソッドによって生成され, ondestroyメソッドによって消滅する

More information

Prog2_6th

Prog2_6th 2017 年 11 月 2 日 ( 木 ) 実施 インテントインテントとは Android アプリは複数のアクティビティを持つことが出来, また, アクティビティ以外の要素も持つので, 複数のアクティビティ間, アクティビティとアクティビティ以外の要素との間といったオブジェクト間を結び付ける仕組みが必要となる その役割を担うのがインテントで, 複数のアプリ間やアプリとシステムとの間もインテントで結び付けることが出来る

More information

Prog2_2nd

Prog2_2nd 2017 年 10 月 5 日 ( 木 ) 実施 アクティビティアクティビティとは Android アプリのユーザインターフェイスの中で, 画面と関連付けられている最も基本的なのものがアクティビティ (Activity) である 複数の画面を利用するアプリには, それぞれの画面に対応したアクティビティが必要となる アクティビティは oncreateメソッドによって生成され, ondestroyメソッドによって消滅する

More information

android2.indd

android2.indd Chapter 10 第 10 章サンプルコード集 この章ではプログラミングの参考となるサンプルコードを掲載しています コード記載のない部分についてはプロジェクトのデフォルトです アクティビティ間のデータ受け渡しサンプル アプリケーション名 : ActivityResultTest プロジェクト名 : ActivityResultTest パッケージ名 : com.example.activitytest

More information

Prog2_6th

Prog2_6th 2016 年 11 月 10 日 ( 木 ) 実施 インテントインテントとは Android アプリは複数のアクティビティを持つことが出来, また, アクティビティ以外の要素も持つので, 複数のアクティビティ間, アクティビティとアクティビティ以外の要素との間といったオブジェクト間を結び付ける仕組みが必要となる その役割を担うのがインテントで, 複数のアプリ間やアプリとシステムとの間もインテントで結び付けることが出来る

More information

例題 3-2 ボタンをクリックしたらタイトルバーにテキストを表示します activity_main.xml <LinearLayout xmlns:android=" android:layout_height="

例題 3-2 ボタンをクリックしたらタイトルバーにテキストを表示します activity_main.xml <LinearLayout xmlns:android=  android:layout_height= 3-2 ボタン (Button) とクリック リスナー ボタンにクリック リスナーを付け ボタンのクリック ( タップ ) で何かの処理を行う 方法を説明します 1. OnClickListener リスナーのインプリメント Button bt=(button)findviewbyid(r.id.button); で取得したボタン bt がクリックされたときの処理を行うクリック リスナーを付けるにはまず

More information

Prog2_9th

Prog2_9th 2017 年 11 月 30 日 ( 木 ) 実施 Canvas による描画 Canvas とは Canvas は, 描画コールを保持するためのクラスである 描画には, 次の 4 つの要素が必要である (1) ビットマップピクセル ( 画素 ) を保持 (2) キャンバス描画コール ( ビットマップへの書き出し要請 ) に対応 (3) 描画プリミティブ描画領域, パス, テキスト, ビットマップ等

More information

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウィジェット からボタンのアイコンをドラッグして, ワークスペースにドロップする. 図 1 ボタンの追加

More information

Microsoft Word - Android_DI講座_画面800×1280

Microsoft Word - Android_DI講座_画面800×1280 Page 12 4 ボタンが押されたらイベントを取り扱う ボタンの押下時に 入力された内容を確認するダイアログを表示するようにします 4.1 リソースを追記する 網掛け部分を追加してください ファイル名 : res/values/strings.xml < 省略 >

More information

1: Android 2 Android 2.1 Android 4 Activity Android Service ContentProvider BroadcastReceiver Activity ( ): Android 1 Android Service ( ): ContentProv

1: Android 2 Android 2.1 Android 4 Activity Android Service ContentProvider BroadcastReceiver Activity ( ): Android 1 Android Service ( ): ContentProv II Java/Android 1 Android 1.1 Google 2003 Android 2005 Google Android 2007 11 Google T- (T-Mobile International) Open Handset Alliance OHA Android 1.2 OS Android 7.0 API (Application Program Interface)

More information

Prog2_5th

Prog2_5th 2017 年 10 月 26 日 ( 木 ) 実施 レイアウトレイアウトの位置付け Android アプリで用いられる様々なレイアウト (Layout) は, それぞれ ViewGroup クラスを継承するクラスとして定義されているものであり,ViewGroup クラスは Viewクラスを継承するクラスである Viewクラスはユーザインタフェイスを構成する基本要素を表す ビュー (View) は画面上に長方形の領域を占め,

More information

2-2. TableLayout TableLayout は任意のビューを表形式で配置したい場合に利用する (HTML の Table に近いイメー ジ ) 2-3. FrameLayout ビューを重ねて表示するためのレイアウト 後から配置した部品が前面に来る仕様となっている 3. まとめ レイア

2-2. TableLayout TableLayout は任意のビューを表形式で配置したい場合に利用する (HTML の Table に近いイメー ジ ) 2-3. FrameLayout ビューを重ねて表示するためのレイアウト 後から配置した部品が前面に来る仕様となっている 3. まとめ レイア 1. レイアウトの基本 Android でレイアウトを作成する方法には XML で定義する方法 と プログラム上から作成する方法 の 2 つがある XML で定義する方が読みやすく変更も容易なので 基本的には XML でレイアウトを作成し 動的にレイアウトを変更したい場合にプログラムで記述するのが一般的である 2. レイアウトの種類 ビューを配置するベースとなるレイアウトについて説明する ここで紹介するレイアウト以外にも

More information

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft Word - Android_SQLite講座_画面800×1280 Page 5 5 アクティビティ ( 一覧 ) を作成する ファイル名 : src/jp/edu/mie/view010.java ( 新規作成 ) /* * View010 */ import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view;

More information

Prog2_10th

Prog2_10th 2017 年 12 月 7 日 ( 木 ) 実施 効果音の付加 SoundPool とは Android には音を処理するクラスが複数用意されているが, その中で SoundPool は, 予め音のデータをメモリ上に読み込んで再生するため, 長い音楽よりも短い音を扱うのに適している また,SoundPool では遅延が無いので, 効果音を付加したい場面で用いられる 授業の準備 1)Android Studio

More information

補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.t

補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.t 補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.toast; public class KeyEventSampleActivity extends Activity

More information

Prog2_6th

Prog2_6th 2015 年 10 月 29 日 ( 木 ) 実施 レイアウトレイアウトの位置付け Android アプリで用いられる様々なレイアウト (Layout) は, それぞれ ViewGroup クラスを継承するクラスとして定義されているものであり,ViewGroup クラスは Viewクラスを継承するクラスである Viewクラスはユーザインタフェイスを構成する基本要素を表す ビュー (View) は画面上に長方形の領域を占め,

More information

玉転がしタブレット端末の特徴の一つとして, センサを使った動作や, 指による画面操作がある. それらを活用して, 図形を動かすアプリの例を示す. 1. プロジェクトを作る Tama アプリケーションを作る,Tama プロジェクトを作る. 図 1 プロジェクト作成 プロジェクトの構成を設定する. 図

玉転がしタブレット端末の特徴の一つとして, センサを使った動作や, 指による画面操作がある. それらを活用して, 図形を動かすアプリの例を示す. 1. プロジェクトを作る Tama アプリケーションを作る,Tama プロジェクトを作る. 図 1 プロジェクト作成 プロジェクトの構成を設定する. 図 玉転がしタブレット端末の特徴の一つとして, センサを使った動作や, 指による画面操作がある. それらを活用して, 図形を動かすアプリの例を示す. 1. プロジェクトを作る Tama アプリケーションを作る,Tama プロジェクトを作る. 図 1 プロジェクト作成 プロジェクトの構成を設定する. 図 2 プロジェクトの構成 ランチャー アイコンを設定する. 図 3 ランチャー アイコンを設定する BlankActivity

More information

Taro-twokansu3.jtd

Taro-twokansu3.jtd //------------------------------------------------ // // 2 次関数のグラフの広がり // y=ax^2 のグラフ // Ver3 // Copyright(C) K.Niwa 2014.08.09 // //------------------------------------------------ NO.33 エミュレータ画面例 [ アプリの概要

More information

Prog2_10th

Prog2_10th 2016 年 12 月 8 日 ( 木 ) 実施 効果音の付加 SoundPool とは Android には音を処理するクラスが複数用意されているが, その中で SoundPool は, 予め音のデータをメモリ上に読み込んで再生するため, 長い音楽よりも短い音を扱うのに適している また,SoundPool では遅延が無いので, 効果音を付加したい場面で用いられる 授業の準備 1)Android Studio

More information

スライド 1

スライド 1 Android の UI いろいろ 2009/09/12(Sat) 日本 Android の会 重村浩二 この資料内容の一部は Google が作成 提供しているコンテンツを複製したものでクリエイティブコモンズの表示 2.5 ライセンスに記載の条件に従って使用しています 今回の勉強会のターゲット領域は ココ です アジェンダ Android の Basic Design Icon Design が

More information

mazec テクニカルガイド第5版(Android版)

mazec テクニカルガイド第5版(Android版) 法人向け mazec テクニカルガイド 外部アプリケーション連携 ( Android 版 ) 第 6 版 Android は Google Inc. の登録商標です その他記載された会社名 製品名等は 各社の登録商標もしくは商標 または弊社の商標です 本書は株式会社 MetaMoJi が作成したものであり マニュアルの著作権は 株式会社 MetaMoJi に帰属します 本書の内容は予告なく変更することがあります

More information

Microsoft Word - A05_AndroidプログラミングJUMP_画面800×1280

Microsoft Word - A05_AndroidプログラミングJUMP_画面800×1280 Ⅴ Android プログラミング JUMP/Page 1 Ⅴ Android プログラミング JUMP 1 Jump の標準授業時数時間 ( 月中旬まで ) 2 実習用サーバーの R:\ その他 \Java\JumpPro_init フォルダを z:\workspace へインポートしてください その方法は次のとおりです (1)Eclipse を起動して ファイル - インポート を選択してください

More information

Microsoft Word - Android_DI講座_画面800×1280

Microsoft Word - Android_DI講座_画面800×1280 Page 4 3 画面にウィジェットを表示する Android のアプリ開発では通常 XML ファイルと Java ファイルの両方を作ります 画面内の GUI 部品などの配置 ( レイアウト ) は XML ファイルを記述し これらの部品を用いるロジックを Java ソースで書きます この単元では この方法で説明していきます なお ゲームアプリではレイアウトもロジックも Java ソースで書く場合がありますが

More information

Microsoft Word - Android_DI講座_画面800×1280

Microsoft Word - Android_DI講座_画面800×1280 Page 21 5 複数の画面を使う ( インテント Intent) インテントは アクティビティ間やアプリケーション間でやり取りするメッセージの役割を果たすものです インテントを送る事で アプリケーション内の画面遷移や他アプリケーションの呼び出しを行います 主にアクティビティを起動する際のパラメータに使われます intent: 意思 付加情報 ( 配列 文字列 整数型など ) を別アプリケーションに通知でき

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

Prog2_5th

Prog2_5th 2014 年 10 月 23 日 ( 木 ) 実施 サービスサービスとは Android アプリの動作環境は, スマートフォンの様に電話が掛かってきた場合の対応等も考慮しなければならないが, アクティビティはこの様な場合には, 処理を中断してしまう こういう場合にもバックグラウンドで動作し続けるのがサービスである サービスはインテントで起動することも可能であるが, バインドという仕組みを用いてサービスが提供するインターフェイスとアクティビティとを結び付けて起動しないと,

More information

Microsoft Word - _Intent.doc

Microsoft Word - _Intent.doc public class Intent extends Object implements Parcelable Cloneable 英和 : 意図, 目的 intent が 意図 目的 を意味するように Android ではアプリ ( アクティビティ ) が何をしたいかという 意図 目的 のリクエスト メッセージをシステムに送ると, システムがそれを解釈 判断し, 適切なアクティビティへ渡す仕組みが備わっている

More information

プロジェクト毎に名前を指定する ( ここでは AndroidTest) 動作可能な最低バージョン メインターゲットのバージョン すべて設定してクリック チェックを外す クリック

プロジェクト毎に名前を指定する ( ここでは AndroidTest) 動作可能な最低バージョン メインターゲットのバージョン すべて設定してクリック チェックを外す クリック 1. とにかく Android アプリを作ってみよう 1.1 Eclipse の起動 Android アプリの開発言語は Java です.Java プログラムの開発では統合開発環境 Eclipse が最も良く用いられており, この実習でも Eclipse を使います. この実習で用いる Eclipse は Android アプリの開発用の設定を終えたバージョンです. デスクトップ上の以下のアイコンをクリックして

More information

Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し An

Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し An Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し Android SDK の plugin を Eclipse にインストールします Eclipse のインストール時に

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

はじめに Android は スマートフォンやタブレット PC などの携帯情報端末を主なターゲットとしたプラットフォーム (OS) で Linux カーネル層 ライブラリ層 Android ランタイム層 アプリケーションフレームワーク層 アプリケーション層などで構成されます Android のアプリ

はじめに Android は スマートフォンやタブレット PC などの携帯情報端末を主なターゲットとしたプラットフォーム (OS) で Linux カーネル層 ライブラリ層 Android ランタイム層 アプリケーションフレームワーク層 アプリケーション層などで構成されます Android のアプリ はじめに Android は スマートフォンやタブレット PC などの携帯情報端末を主なターゲットとしたプラットフォーム (OS) で Linux カーネル層 ライブラリ層 Android ランタイム層 アプリケーションフレームワーク層 アプリケーション層などで構成されます Android のアプリケーションを開発するための言語は Java と XML です Android や iphone などのスマートフォンや

More information

Android でサービスしよう! 日本 Android の会 2 月 21 日大阪セミナ- 有山圭二 ( 有限会社シーリス )

Android でサービスしよう! 日本 Android の会 2 月 21 日大阪セミナ- 有山圭二 ( 有限会社シーリス ) Android でサービスしよう! 日本 Android の会 2 月 21 日大阪セミナ- 有山圭二 ( 有限会社シーリス ) 目次 サービスって何? サービスで何が出来るの? ハンズオン Service を開始する Service と Activity の違い? AIDL によるインターフェースの定義と実装 Activity からの操作 まとめ 発展 参考 2009/02/21 JAC 大阪セミナー

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

非推奨メソッド等の掲載について

非推奨メソッド等の掲載について 非推奨メソッド等の掲載について スマートにプログラミング Android 入門編第 2 版 SDK 4/2.3 対応 (2012 年 6 月 11 日発行第 2 版第 1 刷 ) において 一部現在では非推奨となったレイアウト及びメソッドの利用が掲載されておりました お詫びと共に補足 訂正させて頂きます 下記にその対応について示します 株式会社リックテレコム書籍出版部 ( 情報更新日 :2012.8.14)

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

2.0.1 6 2.0 5 1.6 4 Donut 1.5 3 Cupcake 1.1 2 非 公 開 1.0 1 非 公 開 2. Android4.0 の 留 意 事 項 2-1 Menu キーの 扱 い 端 末 下 部 の Menu Home Back の 各 ハードキーが ディスプレー 上

2.0.1 6 2.0 5 1.6 4 Donut 1.5 3 Cupcake 1.1 2 非 公 開 1.0 1 非 公 開 2. Android4.0 の 留 意 事 項 2-1 Menu キーの 扱 い 端 末 下 部 の Menu Home Back の 各 ハードキーが ディスプレー 上 付 録 Android,Android SDK,Eclipse のバージョン Android プログラミング Bible( 初 級 基 礎 編 中 級 Android 的 プログラミング 法 上 級 各 種 処 理 )は Eclipse 3.6 Helios Android 2.2(API 8) で 開 発 し 実 機 は SAMSUNG GALAXY S で 確 認 しました さらに 本 書 のプログラムは

More information

日 力力 生 行行 入 入 力力 生 用 方

日 力力 生 行行 入 入 力力 生 用 方 日 力力 生 行行 入 入 力力 生 用 方 力力 生 行行 自 行行 生 力力 生 一 二 力力 生 力力 力力 方 ファイル書き込み Androidプロジェクトの 生成 新規Androidプロジェクトを下記の設定値で作成 項 目名 設定値 プロジェクト名 Sample9 ビルドターゲット Android 2.2にチェックを付 ける アプリケーション名 Sample9 パッケージ名 jp.ac.uot

More information

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン 保存 データを保存する方法として, 主に,3 種類ある. [1] SharedPreference [2] ファイル [3] データベース これらのうち, よく使いそうな,[1] と [2] の方法を説明する. (1) SharedPreference SharedPreference は, 変数名とその値のペアをアプリごとに記憶しておくことができ る機能である. たとえば, アプリを起動した回数を記憶しておいたり,

More information

そして 取得した OutputStream インスタンスを使い 文字コードは UTF-8 として PrintWriter インスタンスを生成して あとは PrintWriter.append() で書き込みたい文字 列を渡して close() で保存する というだけです ファイルの読込み方法 それで

そして 取得した OutputStream インスタンスを使い 文字コードは UTF-8 として PrintWriter インスタンスを生成して あとは PrintWriter.append() で書き込みたい文字 列を渡して close() で保存する というだけです ファイルの読込み方法 それで Android: データを保存する方法 Android のアプリケーションで データを保存する方法を説明します 保存する方法としては以下のものがあります ファイルとして保存 Preference データベース (SQLite) ファイルへ書き込む Android のファイルへの書き出しはアクセス権限の設定部分があるので読み込みの openfileinput メソッドより 引数が増えています public

More information

Android Layout SDK プログラミング マニュアル

Android Layout SDK プログラミング マニュアル プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し An

Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し An Android アプリを作るための環境設定 Android アプリを作るのに必要なものは Android SDK と Java 開発環境の Eclipse です 環境設定作業の概要はまず Android SDK と Eclipse をそれぞれインストールします その後 Eclipse を起動し Android SDK の plugin を Eclipse にインストールします Eclipse のインストール時に

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

スライド 1

スライド 1 グラフィックスの世界第 3 回 サイバーメディアセンター サイバーコミュニティ研究部門安福健祐 Processing によるアニメーション setup と draw void setup() size(400, 400); void draw() ellipse( mousex,mousey,100,100); void とか setup とか draw とかはじめて見る が出てきてややこしい ellipseは円描く関数でした

More information

android2.indd

android2.indd CHAPTER 3 第 3 章プログラミング Chapter 3 第 3 章プログラミング プログラミングの最初は Eclipse の使い方を覚えることです アプリケーション開発のプラットフォームである Eclipse は非常に高機能であり プログラミングのかなりの部分をアシストしてくれる機能が備わっています Eclipse のワークスペース Eclipse のワークスペースは パースペクティブ と呼ばれ

More information

Microsoft Word - USB60BCR_10.doc

Microsoft Word - USB60BCR_10.doc REX-USB60MB USB Serial Converter(Micro-USB B タイプ ) Android 用サンプルプログラム USB60BCR について 1. 本プログラムの概要 2 2. サンプルプログラムの作成と操作手順 3 2-1. USB60BCR のダウンロードとプロジェクトのインポート 3 2-2. FTDI 社製クラスドライバ (D2xx.jar) のダウンロードと jar

More information

「Android Studioではじめる 簡単Androidアプリ開発」正誤表

「Android Studioではじめる 簡単Androidアプリ開発」正誤表 Android Studio Android 2016/04/19 Android Studio Android *1 Android Studio Android Studio Android Studio Android Studio Android PDF : Android Studio Android Android Studio Android *2 c R TM *1 Android

More information

Java言語 第1回

Java言語 第1回 Java 言語 第 2 回簡単な Java プログラムの作成と実行 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp 簡単な Java プログラム Java プログラムのファイル名 Java プログラムのファイル名命名ルール ファイル名とクラス名は同じでなければならない HelloJava.java public class HelloJava { public

More information

テーブルの確認 sqlite>.tables.tables コマンドでデータベース内のテーブル一覧を表示する テーブルスキーマの表示 sqlite>.schema mytable.schema コマンドで指定のテーブルのスキーマを表示できる テーブル出力の整形.explain コマンドを使うと テー

テーブルの確認 sqlite>.tables.tables コマンドでデータベース内のテーブル一覧を表示する テーブルスキーマの表示 sqlite>.schema mytable.schema コマンドで指定のテーブルのスキーマを表示できる テーブル出力の整形.explain コマンドを使うと テー Sqlite 関連コマンド紹介 adb shell コマンド 現在 どのディレクトリに居るかは pwd コマンドでわかります pwd 次に今いるディレクトリ上にどんなファイル ディレクトリ一覧があるかを知るために ls コマンドを実行します ls ディレクトリへの移動は cd コマンドを実行します cd フォルダ ( ディレクトリ ) 名 tmp ディレクトリを作ってみます ディレクトリ作成は mkdir

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - OOP.pptx 第 14 回 第 12 章アプレット 28 8 アプレットとは アプレット : ウェブ上で HTML のソースコードから参照されるプログラム.Web サーバや Web ブラウザ ( アプレットビューア ) から動的にアプレットはダウンロードされる. 289 HelloAp.java アプレットの基本事項 public class HelloAp extends Applet{ public void

More information

ToDo: 今回のタイトル

ToDo: 今回のタイトル グラフの描画 プログラミング演習 I L03 今週の目標 キャンバスを使って思ったような図 ( 指定された線 = グラフ ) を描いてみる 今週は発展問題が三つあります 2 グラフの準備 値の算出 3 値の表示 これまでは 文字列や値を表示するのには 主に JOptionPane.showMessageDialog() を使っていましたが ちょっとしたものを表示するのには System.out.println()

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - OOP.pptx 第 5 回 第 3 章継承 91 継承 ( インヘリタンス ): ウインドウシステムを例に説明 図 3.1: ウインドウの中にラベル, ボタン, リストの部品 各部品の属性と操作共通の属性と操作 ウインドウ内の左上を原点として (x, y) で場所指定 : 属性 (width, height) でサイズ指定 : 属性 識別のための名前 (name): 属性 置く位置の指定 (setlocation,

More information

Android @vvakame @vvakame GoogleAppEngine Android APT 2.3 http://developer.android.com/resources/dashboard/platform-versions.html 2011 2.3.4 http://plusd.itmedia.co.jp/mobile/articles/1202/17/news097.html

More information

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u i アプリ簡易リファレンス ver0.1.5.1 1.i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.util.random; int ; Random =new Random(); =Math.abs(.nextInt()% ); 0~ まで乱数を発生させます (3) 機種ごとの縦横幅を調べる

More information

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー HCI プログラミング 3 回目ウィンドウを表示してみよう 今日の講義で学ぶ内容 ウィンドウの表示 ウィンドウの最大/ 最小サイズと半透明化 複数のウィンドウと親子関係 ウィンドウの表示 1 ウィンドウを表示してみましょう ウィンドウアプリケーションは Application クラスを拡張して作成します ソースファイル名 :Sample3_1.java // ウィンドウの表示 public class

More information

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft Word - Android_SQLite講座_画面800×1280 Page 24 11 SQLite の概要 Android にはリレーショナルデータベースである SQLite が標準で掲載されています リレーショナルデータベースは データを表の形で扱うことができるデータベースです リレーショナルデータベースには SQL と呼ばれる言語によって簡単にデータの操作や問い合わせができようになっています SQLite は クライアントサーバ形式ではなく端末の中で処理が完結します

More information

用 日 力力 生 大 用 生 目 大 用 行行

More information

クイックセットアップ for モバイル(iOS/Android)

クイックセットアップ for モバイル(iOS/Android) はじめに はじめに Enterprise DaaS( サーバ OS タイプ ) リモートアクセスオプション ( 以下リモートアクセス ) は 手元端末から対象機器に安全に接続できるリモートアクセスサービスです 手元端末 と は 対象機器 と は アクセスに使用する iphone/ipad Android 端末のことです MagicConnect サーバとは アクセス先となる会社 PC のことです リモートアクセス中継管理用サーバです

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 独習 Java 第 3 版 13.1 アプレットの概要 13.2 最初の Java アプレット 13.3 アプレットのライフサイクル 13.4 Graphics クラス アプレットの概要 (1/3) Web ページの HTML ソースコードから参照されるプログラム Web サーバーからブラウザに動的にダウンロードされる ダウンロードされたアプレットはブラウザの環境で実行される アプレットビューアなどのツールで実行することもできる

More information

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなどを設定できます ソースファイル名 :Sample8_1.java // HP よりインポート文をここへ貼り付けてください

More information

自宅でJava言語の開発環境を作る方法

自宅でJava言語の開発環境を作る方法 自宅で Android アプリ 開発環境を作る方法 2011 年 3 月 8 日現在 あいあいスクール代表 畠茂雄 ( はたけしげお ) もくじ はじめに... 3 第 1 章 : 開発に必要なソフトウェアのインストール... 4 (1)Java SE Development Kit (JDK) のインストール... 5 (2)Android SDK のインストール... 11 (3) 統合開発環境

More information

GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ

GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ 2-2 手書認識認識結果 ( 数式 ) を描画する ステップ 3 認識した数式を元に関数グラフを描画する

More information

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 目次第 1 章プログラミングについて 1 ソフトウェアの働き 1 2 プログラミング言語 1 3 主なプログラミング言語の歴史 2 第 2 章 Visual Basic について 1 Visual Basic とは 3 2.NET Framework の環境 3 3 Visual Basic と.NET Framework の関係

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 2 回クラス インスタンス メソッド コンストラクタ 先週の出席確認 Webブラウザはどのようなプログラムでできているかこの問に答える前に Webブラウザとは 何か? 普段使ってますよね? Webブラウザを使ってできることと Webブラウザがやっていることを区別する必要がある 何をすれば Web ブラウザ と言えるのか NHK チコちゃんに叱られる! Web

More information

Another Activity オブジェクトは生成されてもいないのである これは 後述の onpause メソッ ドの説明からも明らかである 翻訳 : A の onpause から返ってこない限り B は create されない ため ここで長い処理は行ってはならない 実際にトレースをおこなってみ

Another Activity オブジェクトは生成されてもいないのである これは 後述の onpause メソッ ドの説明からも明らかである 翻訳 : A の onpause から返ってこない限り B は create されない ため ここで長い処理は行ってはならない 実際にトレースをおこなってみ Activity のライフサイクルに関する間違い onpause の前の Another Activity comes in front of the activity という部分は間違い あるいは間違いで無いとしても非常に紛らわしい onpause が呼び出される以前には 1 Another Activity オブジェクトは生成されてもいないのである これは 後述の onpause メソッ ドの説明からも明らかである

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが

More information

Java言語 第1回

Java言語 第1回 Java 言語 第 8 回ウインドウ部品を用いる (1) 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp 前回の課題 (1) マウスを使って, 前回課題で作成した 6 4 のマスの図形で, \ をマウスクリックによって代わるようにしなさい 前回の課題 (2) import java.applet.applet; import java.awt.*;

More information

スライド 1

スライド 1 C# の基本 ~ ファイル読み込み ~ 今回学ぶ事 今回はファイル読み書きに必要 BinaryReader クラスについて記載する ファイル参照ダイアログである OpenFileDialog クラスについても理解を深める また Bitmap クラスを用いた Bitmap ファイルの読み込み方法についても学ぶ フォーム作り まず label picturebox を配置する ツールボックスより左クリックで選択する

More information

1 JAVA APPLET 実習 1. はじめに Java フォルダに applet フォルダを作成する 2. 実習問題の作成 J01.java public class J01 extends Applet{ public void paint(graphics kaku){ kaku.drawstring("hello World from Java!",60,70); j01.html

More information

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版   Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 辞書項目 API 3.1. 最新バージョン 3.1.1. 最新バージョンの辞書を取得する 3.2. 辞書項目 3.2.1. 辞書項目を取得する 3.2.2.

More information

クイックセットアップ for モバイル(iOS/Android)

クイックセットアップ for モバイル(iOS/Android) はじめに はじめに マジックコネクトは 手元端末から対象機器に安全に接続できるリモートアクセスサービスです 手元端末 と は 対象機器 と は アクセスに使用する iphone/ipad Android 端末のことです マジックコネクトサーバとは アクセス先となる会社 PC のことです リモートアクセス中継管理用サーバです ご利用までの流れ 配布物 説明 1 配布物の確認 アカウント管理者 から配布された右記の物をご確認ください

More information

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name クラス ( 教科書第 8 章 p.267~p.297) 前回は処理をまとめる方法として メソッドについて学習した 今回はメソッドとその処理の対象となるデータをまとめるためのクラスについて学習する このクラスはオブジェクト指向プログラミングを実現するための最も重要で基本的な技術であり メソッドより一回り大きなプログラムの部品を構成する 今回はクラスにおけるデータの扱いとクラスの作成方法 使用方法について説明していく

More information

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr 第 5 章グラフィックス, スレッドとマウスイベントによる描画処理 描画処理およびマルチスレッドの基礎についてそれぞれ理解し,Java を用いてイベント処理を組み合わせたプログラムを作成する 5.1 描画処理 最初に, パネル上にグラフィックス描画を行う方法について説明する グラフィックスを表示するにはフレームにパネルを配置し, 処理内容を paintcomponent メソッド内に記述する paintcomponent

More information

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料 10/28 Java AWT の基本構造 (Frame クラスの継承 ) 演習課題資料以下のプログラムを完成せよ 共通課題 1.Frame を生成するプログラム // Frame クラスを継承して 終了ボタンのみを定義した クラスの定義 class WhiteWindow 1 { // Frame クラスの継承をする (Frame クラスの拡張 ) WhiteWindow (String title){

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 02 グラフゖックで簡単な図形を描く図形描画プログラム 1 今回作成するゕプリケーションの概要 ボタンをクリックすると図形を描くプログラム 行われる動作 [1] ボタンをクリック [2] そのボタンに対する図形を描く これを使用者とコンピュータの関係で描くと [ 使用者 コンピュータ ] ボタンをクリック [ 使用者 コンピュータ ] 図形を描画して見せる 使用者がコンピュータにすること ボタンをクリック

More information

GEC-Java

GEC-Java Copyright (C) Junko Shirogane, Waseda University 2019, All rights reserved. 1 プログラミング初級 (Java) 第 14 回継承 白銀純子 第 14 回の内容 継承 オーバーライド ポリモーフィズム Copyright (C) Junko Shirogane, Waseda University 2019, All rights

More information

PowerPoint Presentation

PowerPoint Presentation 上級プログラミング 2( 第 3 回 ) 工学部情報工学科 木村昌臣 今日のテーマ GUI プログラミング入門 AWT Java で GUI を作る方法 (API) AWT Abstract Window Toolkit GUIをつくるクラス群を提供 ( 基本!) OSによらない外観 Swing 逆にいえば OS ネイティブな look and feel ではない AWT をもとに JavaFX JDK1.8

More information

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String 目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()

More information

KDDI ペーパーレスFAXサービス

KDDI ペーパーレスFAXサービス for Android 操作説明書 2012 年 2 月 7 日 KDDI 株式会社 はじめに 本操作説明書では KDDI ペーパーレス FAX サービス for Android の基本操作方法を記載しております KDDI ペーパーレス FAX サービス for Android は KDDI ペーパーレス FAX サービス に届いた FAX やメッセージを au の Andoroid スマートフォン上で簡単に確認することができます

More information

sscapt.jar(ver.2) ソースコードの使い方 説明書 MLTLab ( エムエルティ ラボ ) 2014 年 4 月 21 日

sscapt.jar(ver.2) ソースコードの使い方 説明書 MLTLab ( エムエルティ ラボ ) 2014 年 4 月 21 日 sscapt.jar(ver.2) ソースコードの使い方 説明書 MLTLab ( エムエルティ ラボ ) 2014 年 4 月 21 日 目次 1. はじめに...3 (1) 著作権...3 (2) ソースコード使用条件...3 (3) 本ソースコード使用に必要なもの...3 2. ソースコードの使い方...5 (1)zip ファイルの展開...5 (2) プロジェクトのインポート...5 (3)

More information

Android osの歴史 1.6から2.3まで携帯のみ 3.0 タブレットのみ 4.0 タブレットで培ったUIなど の技術を携帯でも 使えるとうにと APIなんかが統合された

Android osの歴史 1.6から2.3まで携帯のみ 3.0 タブレットのみ 4.0 タブレットで培ったUIなど の技術を携帯でも 使えるとうにと APIなんかが統合された Android 4.0 でのアプリの作り方 といってもCompatibility(互換性Sdk) で作ろう Android osの歴史 1.6から2.3まで携帯のみ 3.0 タブレットのみ 4.0 タブレットで培ったUIなど の技術を携帯でも 使えるとうにと APIなんかが統合された Android 4.0 以下のバージョンで全体の98.4% なので Android 4.0 の SDK で開発すると今のところ動く機種が少ない

More information

BBB_マニュアル(聴講者用)

BBB_マニュアル(聴講者用) BigBlueButton 操作マニュアル < 聴講者用 > 目次 はじめに 01 画面構成 02 機能説明 1. ログイン 03 2. カメラとマイクの設定 04 3. 日本語切替 08 4. ユーザーの管理 09 5. ビデオの共有 11 6. ビデオの公開 17 7. プレゼンテーション 19 8. デスクトップの共有 28 9. チャット 35 10. リスナーの管理 39 11. レイアウトのリセット

More information

情報更新日 :2012/5/20 サンプルソースの文字化けについて [ トラブル事例 ] Eclipse に ダウンロードしたソースコードをインポートすると文字化けが起きる ( 関連箇所 : 0-1 はじめに ) [ 回答 ] 本書でその利用を前提としております Tech Fun Eclipse は

情報更新日 :2012/5/20 サンプルソースの文字化けについて [ トラブル事例 ] Eclipse に ダウンロードしたソースコードをインポートすると文字化けが起きる ( 関連箇所 : 0-1 はじめに ) [ 回答 ] 本書でその利用を前提としております Tech Fun Eclipse は スマートにプログラミング Android 入門編第 2 版 SDK4/2.3 対応 よくあるご質問 (FAQ) ここでは 読者の皆様から寄せられた質問の中で 比較的多く見受けられたトラブル事例 とその解決策を集め掲載致しました お困りの際の解決のヒントとしてご利用下さい index 株式会社リックテレコム書籍出版部 ( 情報更新日 :2012.8.13) ソースコードをインポートすると文字化けが起きる

More information

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装

More information

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問 Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問のメソッドを追加する public static void main(string[] args) {

More information

CodeGear Developer Camp

CodeGear Developer Camp T2 Delphi チュートリアルセッション Delphiはじめて奮戦記 で学ぶ Delphiチュートリアル 株式会社フルネスコーチング事業部マネージャー田原孝 1 アジェンダ 株式会社フルネスについて Delphiプログラミングの基本 演習 : 計算機のテンキーを作る 演習 : 計算機の四則演算ボタンを作る 練習問題 まとめ 2 株式会社フルネスについて 事業内容 ハンズオン教育サービス コーチングサービス

More information

CubePDF ユーザーズマニュアル

CubePDF ユーザーズマニュアル CubePDF ユーザーズマニュアル 2018.11.22 第 13 版 1 1. PDF への変換手順 CubePDF は仮想プリンターとしてインストールされます そのため Web ブラウザや Microsoft Word, Excel, PowerPoint など印刷ボタンのあるアプリケーションであればどれでも 次の 3 ステップで PDF へ変換することができます 1. PDF 化したいものを適当なアプリケーションで表示し

More information

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ 教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログラムを記述することはあり得ません 本節では 新規プロジェクトを続けて作る際の注意事項と 簡単な Java

More information

PowerPoint Presentation

PowerPoint Presentation ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:

More information