アットウィキロゴ

Android


クリックイベント:
Button start = (Button) findViewById(R.id.start);
	start.setOnClickListener(new OnClickListener() {
		public void onClick(View v) {
			//処理
		}
	});

状態保持:
// ハイスコア読み込み
SharedPreferences pref;
pref = this.getSharedPreferences("PreferencesEx",    Activity.MODE_PRIVATE);
int stage = pref.getInt("stage", 0);

// ハイスコアの書き込み
pref = getContext().getSharedPreferences(
"PreferencesEx", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt("stage", level);
editor.commit();

isFinishing()で終了状態取得:
isFinishing()を利用すると、Activityの終了状態を判別できる 
画面遷移の種類
-Intentを飛ばした場合:false
-ホームボタンを押した場合:false
-戻るボタンを押した場合:true


Androidで音を鳴らす。[SoundPool編]:
SoundPoolクラスの場合、基本は下記の3処理。

①SoundPoolを new して、
②音声ファイル読み込んで、
③再生する

SoundPool soundPool = new     SoundPool(5,AudioManager.STREAM_MUSIC, 0); // ①  
int soundID = soundPool.load(context, R.raw.lalala, 1); // ②  
soundPool.play(soundID, 1.0F, 1.0F, 1, 0, 1.0F); // ③  

【①の補足】
public SoundPool (int maxStreams, int streamType, int srcQuality)
引数:
maxStreams … このSoundPoolオブジェクトで同時に扱う音声(Stream)の最大数
streamType … 音声(stream)の種類。 AudioManagerクラスに定義されている
srcQuality … サンプルレートの質。(現在はまだ未使用。 0 を使えとのこと)
返り値:
成功なら、SoundPoolオブジェクト
失敗なら、null


【②の補足】
音声ファイルは、res/raw/lalala.ogg に設置したという想定。ResourceIDは R.raw.lalala になる。ここから想像できると思うが、同フォルダに lalala.wav や lalala.mp3 を設置しても区別がつかない。

ちなみに、音声ファイルを安定再生するためには oggファイルが良いとのこと。

public int load (Context context, int resId, int priority)
引数:
context … コンテキスト
resId … 音声ファイルのリソースID
priority … 優先度サンプルレートの質。(現在はまだ未使用。将来互換性のため 1 を使え)
返り値:
sound ID (再生時に使用)


【③の補足】
public final int play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)

引数:
soundID … load()メソッドで返される soundID
leftVolume … 音量[左] (範囲:0.0~1.0)
rightVolume … 音量[右] (範囲:0.0~1.0)
priority … ストリーム優先度 (0 = 優先度最低)
loop … ループの回数 (0 = ループ無し、-1 = 無限ループ)
rate … 再生レート (1.0 = 標準の再生, 範囲:0.5~2.0)
返値:
成功なら、streamID(≠0)
失敗なら、0

IntentへのExtra付加:
intent.putExtra("hoge", String s);
getIntent().getExtras().getString("hoge");

drawableからbitmap変換:
Resources res = this.getResources();
// 画像の読み込み
Bitmap bm = BitmapFactory.decodeResource(res, R.drawable.blue);

Intent時のタスクについて:
マニフェストでアクティビティに以下のオプションを追加すると、シングルタスク(新タスクを別タスクとして記憶せず、自身に積み重ねる)モードになる。HOME画面等に設定。
android:launchMode="singleTask"


Spinnerの初期値設定:
spinner.setSelection(0);

プログレスダイアログ:
progressDialog = new ProgressDialog(CoordinateActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("処理を実行中です...");
progressDialog.setCancelable(true);
progressDialog.show();
(・・・処理・・・)
progressDialog.dismiss();
       
ダイアログのカスタム:
OnCreateDialog(int id){・・・}内でレイアウト等の適用ができる。ダイアログ生成前に呼び出され、returnでダイアログを返してやる

ボタンへのクリックリスナー追加:
(Button)btn.setOnClickListener(new OnClickListener() {
		public void onClick(View v) {
			Intent intent = new Intent(GalleryActivity.this, Main.class);
			startActivity(intent);
		}
	});
エラー関連:
以下のエラーがでた時はどうやらメモリリークっぽい。
端末再起動で直るけど、リーク箇所の特定をしたほうがよさそう
Failed to install XXX.apk on device 'HT0B8RX02778': Too many open files

【View】子Viewの追加&削除:
追加:view.addView(child);
削除;view.removeView(child);
全削除:view.removeAllViews();

カメラにIntentを飛ばして起動:
// Intent for Camera
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, REQUEST_CODE_CAMERA);
保存先はExtraで指定
File tmpPict = new File(Environment.getExternalStorageDirectory(),
				"/hogehoge/"
						+ System.currentTimeMillis() + ".jpg");
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tmpPict));
結果をActivityResultで受け取り処理。
@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       if (requestCode == REQUEST_CODE_CAMERA) {

【View】layout.xmlの読み込み:
setContentView(R.layout.main);
これは
View v = this.getLayoutInflater().inflate(R.layout.main, null);
setContentView(v)
と置き換えられる(→addView()などに)

端末画面サイズ取得:
WindowManager wm = 
(WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Log.d("display", "w:" + display.getWidth());
Log.d("display", "h:" + display.getHeight());

ロケールの取得:
Locale locale = Locale.getDefault();  
Log.v("ロケールは", locale.toString());  
以下のようにロケール別に分岐できる
if (locale.equals(Locale.JAPAN)) {  
 ・・・・・  
}
画面遷移:
intentを飛ばして画面遷移
Intent intent = new Intent(this.context, 遷移先.class);
startActivity(intent);
※manifestへのactivityの追加を忘れないこと!

【View】idから呼び出し:
TextView textViewData = (TextView)findViewById(R.id.hoge);
textViewData.setText("hogehoge");

onClick()内でのボタン選別:
@Override
public void onClick(View v) {
	switch (v.getId()) {
	case R.id.button_animation:
		Intent intent = new Intent(this, Animation.class);
		startActivity(intent);
		break;
	case R.id.button_sub:
		Intent intent2 = new Intent(this, Sub.class);
		startActivity(intent2);
		break;
	default:
		break;
	}
	
}

SharedPreference云々:
SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(this);
Editor ed = SP.edit();

AdMob:
最近仕様が変わったらしい
AdMob導入の注意点

アニメーション:
   private Handler myHandler = new Handler() {
       @Override 
       public void handleMessage(Message msg) {
           if (isAttached) {
               // 移動処理
               move();
                   
               // 再描画
               invalidate();
               sendEmptyMessageDelayed(0, DELAY_MILLIS);
           }
       }
   };

最終更新:2012年01月10日 21:28