サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
blog.global-eng.co.jp
描画を行った内容を画面としてではなく、画像として扱いたい場合があります。 そのような場合にBitmapを使うことで描画した内容を画像として扱うことができるようになります。 方法としてはCanvasクラスのコンストラクタにBitmapクラスのインスタンスを与えます。そうすることでこのCanvasオブジェクトに描画した内容は画面ではなくBitmapに描画されることになります。 このBitmapを介して画像として描画内容を扱うことができます。 それではBitmapに丸を描画しImageViewで表示させて見ます public class MainActivity extends Activity implements OnTouchListener{ @Override public void onCreate(Bundle savedInstanceState) { super.on
今更ながらライフサイクルについておさらいをしてみます。 Activityのみだと寂しいのでSurfacwViewを組み込んだ時の 動きを確認してみます。 では、サンプルコード。 LifeCycleActivity.java public class LifeCycleActivity extends Activity { /** ログ用タグ */ private static String TAG = "LifeCycleActivity"; private LifeCycleView lifeCycleView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "onCreate"); lifeCycleView
標準のIMEはそのアプリの内でハードキーの感知を処理してしまうため、 Activity側でonKeyDownメソッドに処理が渡らず、 IMEが開いているときに戻るキーを押したかどうかを感知できません。 一部のIMEではActivityに戻るキーの操作を与えるように 作られたものもありますが、環境に依存されてしまいます。 そこでViewクラスのonKeyPreImeというメソッドを オーバーライドすることでIMEの閉じる操作を感知してやりたいと思います。 このメソッドをオーバーライドすることでそのViewにフォーカスが乗っている際、キー操作に割り込んだ処理を与えることができます。 ここではIMEの操作を感知したいため、EditTextを拡張したクラスを用意します。 public class EditTextEx extends EditText { public EditT
単純なテキストデータであった場合、XMLファイルとして用意してあると 後からのデータ追加等がとても楽になります。 今回はAndroidでXMLからデータを取得して、その内容をTextViewに反映させる ということをやってみます。 Androidの場合XmlPullParserクラスとXmlクラスを利用することで簡単に XMLデータの解析を行うことができます。 /assets/sample.xml <?xml version="1.0" encoding="UTF-8"?> <data> <param1>param1</param1> <param2>param2</param2> </data> /res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="
TextViewのインターフェースであるOnEditorActionListenerをEditTextに設定することで テキスト編集中のエンターキーの入力を感知することができます。 public class MainActivity extends Activity implements TextView.OnEditorActionListener{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText editText = (EditText)findViewById(R.id.editText); editText.setOnEditorActionListener
デフォルトのボタンやトグルボタンでは無く、用意した画像を表示させたい場合、 javaで制御しようとするとかなり面倒なことになります。 ボタンを押した時、何もしていない時、操作不可の状態の時等、 ボタンはユーザーの操作によって状態が変わります。 xmlで簡単に状態別の画像を表示することができるため、 特別な理由が無い限り、xmlで設定するのが好ましいと思います。 res/drawable/button_sample.xml ※ボタンに設定 <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@drawable/
Activityは基本的に1画面に1つですが、 ActivityGroupを使うことでまとめて扱うことができます。 まずはメイン画面となるActivityGroupを作成します。 ActivityではなくActivityGroupを継承してクラスを作成します。 public class TestActivityGroup extends ActivityGroup { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } ここにLocalActivityManagerという Activityを管理するオブジェクトを追加します。 インスタンスを取得するためのgetLocalA
Androidのホーム画面でアイコンを長押しすると動かせる状態になり、 アイコンを自由に配置可能な状態になります。 今回はSurfaceViewを使わず、Layoutに設定されたViewをホーム画面のアイコンのように 指で自由に動かせるようにします。 FrameMoveActivity.java public class FrameMoveActivity extends Activity implements OnTouchListener, OnLongClickListener { private boolean longClickFlg = false; //長押しチェック用フラグ private View move_view; int currentX; //Viewの左辺座標:X軸 int currentY; //Viewの上辺座標:Y軸 int offsetX; /
ハードキーを持たない機種で文字を入力するための ソフトキーボードの表示を制御したいと思います。 ●Activity起動時の制御 ●フォーカスの移動時の制御 ●別アクションでソフトキーボードを制御 ・Activity起動時の制御 Activity起動時にEditTextにフォーカスがあたっていると ソフトキーボードが自動で立ち上がることがあります。 これを防ぐにはWindowのsetSoftInputModeメソッドを利用し、 起動モードの設定を行います。 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setSoft
今回は、RelativeLayoutを使って以下のように配置をしてみます。 RelativeLayoutは名前の通り、基準となるViewの位置を指定し、 追加するViewはその相対位置を指定していくものです。 今回の場合は、最初にViewを詰め込んだLinearLayoutで背景を設定し その上にボタンを9個配置しています。 レイアウトの基準となるボタンは「中心」ボタンです。 「中心」ボタンのidはbtn_5とし、以下のようにパラメータを指定しています。 ■中心 android:layout_centerInParent=”true” ■左上 android:layout_toLeftOf=”@id/btn_5″ android:layout_above=”@id/btn_5″ ■上 android:layout_above=”@id/btn_5″ androi
Androidの場合、端末によって画面のサイズが異なるため、 Viewサイズを変更する仕組みが必要になります。 ■画面のサイズからViewのサイズを設定する //画面サイズの取得 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); //画面サイズの4分の1をViewのサイズとして設定する int width = (int)(display.getWidth() / 2); int height = (int)(display.getHeight() / 2); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,
LinearLayoutやFrameLayoutといったレイアウトクラスの親クラスは 『ViewGroup』というクラスになっています。 この『ViewGroup』というクラスには ■View getChildAt(int index) ⇒自身に設定されている子Viewの場所を指定して取得する ※指定されるindexはaddViewの順番で0からカウントされていきます ■int getChildCount() ⇒自身に設定されている子Viewの数を取得する という2つのメソッドがあります。 今回はこのメソッドを使って、レイアウトの直下に設定しているView全ての 変更を簡単に行ってみます。 CheckAllView.java public class CheckAllView extends Activity implements View.OnClickListe
今回はAndroidの特徴の一つであるデータ連携のためのコンテンツプロバイダを作成してみます。 コンテンツプロバイダは外部のアプリケーションに様々な情報を提供することができる仕組みでデータベースや画像、各種ファイルなどを提供できます。 作成方法としてはContentProviderクラスを拡張したクラスを作成し、データ提供の仕組みを作成していきます。 提供できるデータはデータベースの情報や画像、HTMLファイルなど様々なものがありますが、今回はテキストファイルの提供を行うサンプルを作成します。 ファイルの提供方法(ContentProviderのメッソドを上書き) ・assetsフォルダ内のファイルの提供 openAssetFile(URI uri,String mode) ・指定場所からのファイルの提供 openFile(URI uri,String mode) 提供さ
Androidでデータベースを使ってプログラムを記述する際にはSqliteを使いますが、 2.1以前と2.2以降ではSQLiteのバージョンが大きく違います。 ・2.1 SQLite version 3.5.9 ・2.2 SQLite version 3.6.22 2.1と2.2で何が大きく違うのかですが、 2.1のSQLiteはカッコ内でテーブル名を設定すると名前.列名で正常に列を認識できません。 たとえば図のテーブルに対して次のようなSQL文があります。 ①: SELECT U.name, T.year FROM USER U LEFT OUTER JOIN TYPE T; ②: SELECT U.name, T.year FROM (USER U LEFT OUTER JOIN TYPE T); 一見するとただ括弧をつけているかいないかの違いですね。 An
Androidでは様々な機能を利用できますが、 今回は単純なHTTP通信を行ってみたいと思います。 Yahoo! JAPANにHTTPでアクセスをして取得できるHTML情報を そのままTextViewに反映させてみます。 HttpCheckActivity .java public class HttpCheckActivity extends Activity { private static String URL = "http://www.yahoo.co.jp/"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // リスナーの設定 findViewById(R.id
アプリの強制終了が発生した際にそのときのエラー情報を送信する処理を考えます。 throw Life – Androidアプリのバグ報告システムを考えるが元ネタです。 ここで確認しているのは次の点です。 ・catchされない例外を捕捉する ・捕捉した例外を処理する ・例外情報をテキストファイルとしてSDカードに出力する ・次回起動時にダイアログで不具合情報の送信確認を行う ・GAEで不具合情報をメールで通知する ●catchされない例外を捕捉する まずはActivityにcatchされない例外の対応を記述します。 onCreateメソッドなどの早い段階で Thread.UncaughtExceptionHandlerを設定してやります。 public void onCreate(Bundle savedInstanceState) { super.onCreate(s
前回ライブ壁紙を作成しましたので 今回はこのライブ壁紙に設定画面を追加したいと思います。 ここでは背景色の設定を追加しています。 ■ 設定画面の追加 ライブ壁紙に設定画面を追加する際にはライブ壁紙の設定用xmlで 「android:settingsActivity」にActivityを与えます。 res/xml/wallpaper.xml <wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:thumbnail="@drawable/image" android:description="@string/app_name" <!-- 設定用Activityの設定 --> android:settingsActivity="jp.co.global.livewall.LiveP
Androidではライブ壁紙というアニメーションしたり、 タッチしたりできる壁紙が利用できます。 今回はこのライブ壁紙を基本的な作り方で作成したいと思います。 画像が画面を移動し続け、タッチすると画像が切り替わるサンプルコードです。 ライブ壁紙はActivityではなく、 「WallpaperService」というクラスを継承して作成します。 そして描画は「WallpaperService.Engine」クラスを継承したクラスで行います。 このEngineクラスのインスタンスを「onCreateEngine」メソッドで返します。 まずは上記の枠組みを書いてみます。 LiveWallService.java public class LiveWallService extends WallpaperService { /** 描画用のハンドラを用意 **/ private
XMLで枠線を描画する記述を行い、レイアウトの背景に枠線を表示します。 shapeタグを利用して次のような記述で設定していきます。 このshapeタグ内に描画を行うための記述を追加していきます。 まずは次のようなXMLを用意します。 frame.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="8dp" android:color="#00cccc" /> </shape> このstrokeタグを利用して枠線を描画することができます。 「android:width」にて枠線の幅を設定 「android:color」にて線の色を設定 後はこれをレイアウトの背景に設
何かアプリケーションを作ろうとして、電話帳のデータを使用したい場合、 コンテンツプロバイダーを利用して電話帳データを取得します。 基本的にアプリケーションのデータはアプリケーション毎に保持しており、 データは公開されていません。 ただ、電話帳のように他のアプリケーションでも利用したいデータがある場合等に コンテンツプロバイダーとしてデータを提供できる形にしておきます。 今回はこのコンテンツプロバイダーを利用して、自作のアプリケーションから 電話帳のデータを取得し、画面に表示するようにします。 取得内容は、 ・名前 ・電話番号 ・メールアドレス の3点です。 // 電話帳の情報を取得 ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(ContactsCont
EditTextに入力している内容を別のTextViewなどにリアルタイムに反映します。 EditTextの入力文字を監視するためのものとしてTextWatcherというものがあります。 Twitterの文字制限のようにテキスト変化にあわせて入力を監視し、編集情報をリアルタイムに取得できます。 その機能を使い、EditTextの編集内容を別のTextViewに反映させます。 まずActivityにTextWatcherインターフェイスを実装します。 そして入力を監視したいEditTextやTextViewのオブジェクトにリスナーをセットします。 リスナーをセットする際のメソッドは「addTextChangedListener」です。 このインターフェイスを実装するためには次の3つのメソッドを実装してやる必要があります。 ・beforeTextChanged ・onText
レイアウトがいくつも必要な画面を作っている時に、 Viewを動かそうとすると動かそうとしている親のレイアウトから 外に出せないという状況になることがあります。 基本的には、レイアウトに設定されたViewを親となるレイアウトの 外に出すことはできません。 ただし、内部的にそうであっても外見上は親となるレイアウトの外に 出してViewを動かすことは可能です。 今回は擬似的にレイアウトをまたいでViewが動いているように 見せる方法を見てみたいと思います。 LayerExceed.java public class LayerExceed extends Activity { /** 描画開始座標:X軸 **/ private int currentX; /** 描画開始座標:Y軸 **/ private int currentY; /** タッチ座標:X軸 **/ priv
レイアウトファイルに設定したViewのidを利用する場合、 「R.id.Viewのid」という使い方が多いと思いますが、 今回は別の方法でidの一覧を取得してみます。 リソースファイルにあらかじめレイアウトで設定する Viewのidを一覧にして書いておきます。(array.xml参照) 「getResources().getStringArray(R.array.リソースファイル名)」と するとStringの配列としてリソースファイルに書かれている内容が取得できます。 ここから 「getResources().getIdentifier(item名, “id”, getPackageName())」 とすることでStringの値をidとして取得することができます。 以下にサンプルコードを載せておきますので、参考にしてみてください。 XMLCheckActivity.j
Viewを継承したクラスで独自のViewクラスを作ったとき そのままではViewのサイズは画面いっぱいになってしまいます。 Viewのコンストラクタなどでサイズを調整しようとしても 画面サイズ取得のタイミングのためうまく設定できません。 Viewをレイアウトにセットする際にレイアウトの数値を設定する方法もありますが、 そんなことをせずにwrap_contentで丁度のサイズがとれる方が楽ですね。 そこでViewクラスの次のメソッドをオーバーライドしてやることでViewのサイズを自動的に調整してやることができます。 ■onMeasure 単純な例としてViewのサイズを50、50に調整してやります。 protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){ super.onMeasure(wi
同じ構成のレイアウトを繰り返し表示したい場合に 一つのレイアウトファイルに対して全て記述してしまうと 非常に読みにくいxmlファイルができあがります。 そういった時には、あらかじめ繰り返し使う予定のレイアウトを 別ファイルとして定義しておき、動的に追加できるようにしておくと便利です。 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_main" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent
今回はHorizontalScrollViewをGestureDetectorで 制御してみたいと思います。 イメージとしては、Androidのホーム画面のようなものです。 一定量のスライドやフリック操作でのページ遷移を行います。 GestureDecActivity.java public class GestureDecActivity extends Activity implements OnGestureListener { private HorizontalScrollView horizontalScrollView; private GestureDetector gestureDetector; private int page = 0; // ページ数 private int displayWidth; // 画面サイズ:X private int disp
スマートフォンやタブレット端末ならではの動作として、 画面を指でスライドさせると次々と表示内容が切り替わるというものがあります。 Androidの場合、とても簡単にスライドショーを実装できます。 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ViewFlipper android:id="@+id/flipper" android:layout_width="fill_parent"
このページを最初にブックマークしてみませんか?
『blog.global-eng.co.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く