[Android] アプリを終了させる方法

■finish()

アクティビティを閉じる際の最良の終了方法。

この方法は現在開いているアクティビティを閉じて一つ前のアクティビティに移動します。

バックボタンを押した時と同じ動きで、実行すると onPause(), onDestroy()が順番に呼ばれる。

復帰時は新規生成となり onCreate(), onStart(), onResume() の順でイベントが発生する。

finish()を宣言する前にIntentを追加することによって一つ前ではなく、移動したいアクティビティへ飛ぶこともできます。

しかし、この方法ではアプリケーション全体を終了することはできません。

■moveTaskToBack (boolean nonRoot)

アプリケーション全体を終了する際の推奨される終了方法。

ただし、アプリケーションを中断状態にするので終了といっても完全に落とす訳ではありません。

引数に false を指定した場合、アプリケーションの開始アクティビティ以外のアクティビティでは機能しません。

通常は引数にtrueを指定して呼び出す。

動きとしては、ホームボタンを押した時と同じ動きで、実行するとonPause()が発生し、次の再開までバックグラウンドで待機します。

メモリ不足になった場合、OSから自動的にonDestroy()を発生させてすべてのタスクを終了させます。

その前に呼び出した場合は最後のアクティビティから再開し、onRestart(), onStart(), onResume() の順で再開します。

■Process.killProcess(int pid)

Process.myPid ()を引数に与えると現在のプロセスを強制終了する。

これを呼び出すと、finish()と同じくそのアクティビティを終了しますが、Activityのすべてのライフサイクルを無視して強制的に落とします。

なので通常はfinish()が推奨されます。

※私の環境ではなぜか使えませんでした・・・

■System.exit(int)

実行中のプロセスを強制終了します。

引数にはRESULT_OKを入れます。

android.os.Process.killProcess(Process.myPid()) と同じような動作になりますが、安全性は保障できないのであまり使用はオススメできません。

たまーーに強制終了はしたけどプロセスが残ってる!?ってなこともあるようで・・・・

しかし、どのような状態でも強制的に落とすことができます。(エラーも無視して・・・w)

 

Posted in Android, Java, プログラミング関連, 備忘録 | Tagged | 3 Comments

[Android] 異なる端末でタッチ座標を固定する

Android端末は画面サイズがばらばら

なので、1枚の画像を背景で表示して、ある部分(人なら頭など)をタッチすると特定のイベントが発生する。

といった処理をある端末の座標の固定値で指定しても別の端末では座標にずれが生じるてしまう。

そこで、ズレを回避するために画面全体のサイズを取得し、取得した値を基に計算をして動的に変化させる。

 

主な手順

1:どれか1つの端末で固定値*1を決める

2:WindowManagerを使用して画面サイズを取得

3:固定値と取得したサイズを割ってパーセンテージを割り出す(固定値 / 画面サイズ)*2

4:3で求めた数値を別の端末の画面サイズに掛けると最初に決めた端末とほぼ同じ座標で使用できる*3

*1:固定値は四角形の場合4点,円形の場合1点といった感じで好みに合わせる

*2:このときに100を掛けて整数値にしなくても良い

*3:小数点分の多少の誤差があります

 

以下ソースの抜粋

//1:画面サイズを取得

  
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
width = disp.getWidth();
height = disp.getHeight();

//2:取得した画面サイズからパーセンテージを取得(手作業)

//3:求めた数値を別の端末の画面サイズに掛ける※ここから別端末

  
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
width = disp.getWidth();
height = disp.getHeight();

X01= (int)((float)width*『数値(小数点第2)』);
X02 = (int)((float)width*0.55f);     //例
Y03 = (int)((float)height*『数値(小数点第2)』);
Y04 = (int)((float)height*0.55f);    //例

以上で最初の端末とほぼ同じ座標でイベントを動作させることができます。

※注
上記の方法は携帯端末用に作りました。
タブレット端末では上部のステータスバーがないためにズレが生じます。
このときはY座標に-50をしてあげれば概ね合います!(適当ですいません。
XOOMで検証したので他の端末は不明です。

Posted in Android, Java, プログラミング関連, 備忘録 | Tagged | Leave a comment

[Android] SharedPreferences概要

****未完成****

SharedPreferencesとは

  • データを保存する方法のひとつ。Android端末の内部的にキーと値をHashMapとして保持し、XMLファイルとして出力をする。
  • 保存した情報はモードの指定次第で別アプリからもデータを取得することができる。
ファイルのモードは以下の4つ
・MODE_PRIVATE
ファイル作成モード(デフォルトのモード)
getSharedPreferences を呼んだ(= ファイルを作成した) アプリケーションからのみアクセスできる(ただし、同じ user ID を共有しているアプリケーションもアクセスできる)

 

・MODE_WORLD_READABLE
ファイル作成モード
他の全てのアプリケーションが読み込みアクセス権限をもつ

 

・MODE_WORLD_WRITEABLE
ファイル作成モード
他の全てのアプリケーションが読み込みアクセス権限をもつ

 

・MODE_MULTI_PROCESS
SharedPreference の読み込みフラグ
た とえプロセス内ですでに shared preferences インスタンスがロードされていても、編集のためにディスク上のファイルをチェックする。複数のプロセスをもつアプリケーションで、それらが同じ SharedPreferences ファイルに書き込みをする場合に必要となる。

 

※ 『MODE_MULTI_PROCESS』 は API Level 11(Android 3.0) で追加されたAPI(タブレット用?)
使用方法としては、getSharedPreferences の第2引数に上記のいずれかのモードを設定します。

 

例:
// 呼び出し(ファイルがなければ新規作成)
// 注:この名前が被ると大変なことになるのでできるだけユニークな名前を書くこと。
SharedPreferences mSharedPreferences = getSharedPreferences("[ファイル名]", [モード指定]);
// 値を取得
mSharedPreferences.getString("[呼び出しキー]","[デフォルト値]");

//---- 値を格納しない場合は以下は必要ありません ----
// 値を格納するための処理
Editor prefsPrivateEditor = mSharedPreferences.edit();
// 値を格納
prefsPrivateEditor.putString("[呼び出しキー]", "[格納値]");
// 格納を有効化 ※これをしないと保存されません。
prefsPrivateEditor.commit();

よく使用される関数は以下
  • getBoolean(String key, boolean defValue)
  • getFloat(String key, float defValue)
  • getInt(String key, int defValue)
  • getLong(String key, long defValue)
  • getString(String key, String defValue)

※使い方によってはデータが失われる可能性があるので取り扱いには注意が必要
Posted in Android, Java, プログラミング関連, 備忘録 | Tagged | 1 Comment

[Android] Layoutの指定領域を取得する

レイアウトの領域を取得する方法の書き残し。

–方法–
取得の仕方は簡単で以下のActivity#onWindowFocusChangedメソッドの中で
//=================================================
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    //------------------------------------
    // ここ
    //------------------------------------
    LinearLayout Layout = (LinearLayout)findViewById(R.id.title);
    int w = Layout.getWidth();    // 幅の取得
    int h = Layout.getHeight();     // 高さの取得}
//=================================================
これだけ見ると領域を取得する部分だけActivity#onCreateメソッドに書けば取得できそうなので書いてみました。
//=================================================
@Override
public void onCreate(Bundle savedInstanceState){  super.onCreate(savedInstanceState);     setContentView(R.layout.main);     ~ 色々と省略 ~     //------------------------------------     // 取得部分     //------------------------------------     LinearLayout Layout = (LinearLayout)findViewById(R.id.title);     int w = Layout.getWidth();    // 幅の取得     int h = Layout.getHeight();     // 高さの取得} //=================================================
結果:
Width = 0
Height = 0
(´゜ж゜`)ぇ。。。
何でだろうと思ったらこんな情報が。
『Layoutの領域を取得する場合、ビューが完全に表示された後でないと取得できない。』らしいですorz
そこで1個前のActivity#onWindowFocusChangedメソッドの登場です。
これはビューが完全に表示された後に呼び出されるメソッドなのでオッケーですね!
ということで実装・実行してみました。
結果:
Width = 600
Height = 160
キター(*´ω`)
無事取得できました。
後は取得した数値を好きに使用しましょう。
以上、Layoutの使用領域の取得でした。
Posted in Android, Java, プログラミング関連, 備忘録 | Tagged | Leave a comment

[jQuery] セレクターの種類

セレクターとは?
以下の箇所の記述をセレクターという
$(“セレクター”).click(function(){…..}
セレクターの種類は以下
// CSS3————————————————————-
・間接セレクター
特定のセレクターの後に出現する要素を指定できる
記述 : $(“#second ~ li”).css(“color”,”red”);
・否定擬似クラス
セレクター内で特定の条件以外のものを指定できる
記述 : $(“li:not(:first-child)”).css(“color”,”red”);
※セレクターの後ろに「:not(…)」を付け、除外する条件を(…)に記述する
・empty擬似クラス
子要素やテキストを含まない要素を指定できる
記述 : $(“li:empty”).css(“color”,”red”);
※セレクターの後ろに「:empty」と記述する
・nth-child擬似クラス
特定のセレクターから指定した番号の要素だけを指定できる
記述 : $(“li:nth-child(3)”).css(“color”,”red”);
※セレクターの後ろに「:nth-child(番号)」と記述する
nth-child擬似クラスは番号の部分に(even)と記述すると偶数番目のli要素を、(odd)を記述すると奇数番目のli要素を指定できる
また、(3n)と記述すればnの前に指定した数値の倍数番目の要素を指定できる
※(3n)の場合は3の倍数番目となる
・last-child擬似クラス
特定のセレクターの中で最後の要素だけを指定できる
記述 : $(“li:last-child”).css(“color”,”red”);
※セレクターの後ろに「:last-child」と記述する
・only-child擬似クラス
セレクターの中の特定の要素が一つだけ含まれる場合、その要素を指定できる
記述 : $(“li span:only-child”).css(“color”,”red”);
※セレクターの後ろに「指定要素:only-child」と記述する
この場合li要素の中のspan要素の部分だけが赤色に変わる
Posted in jQuery, プログラミング関連, 備忘録 | Tagged , | Leave a comment

[jQuery]1つの要素にアニメーションを複数同時に動作させる

同時に動作させる鍵は引数
アニメーションを実行するメソッドは以下の2通り
・animate(params, [duration], [easing], [callback])
・animate(params, options)
今回は2つ目を使用
以下記述例
$("#image").animate({
    opacity:1
},
{
    duration: 3000,
    queue: true
})
.animate({
    marginLeft:300
},
{
    duration: 3000,
    queue: true
})
image要素が3秒かけて透明状態から不透明へ遷移した後300px移動するアニメーションです
このソースだと上から順番に動作します。
そこで、引数optionsのqueueをfalseに変更します。
$("#image").animate({
   opacity:1
},
{
    duration: 3000,
    queue: false
})
.animate({
    marginLeft:300
},
{
    duration: 3000,
    queue: false
})
これだけでアルファの変更と移動が同時に行われます。
以上簡単なアニメーションを複数同時に動作させる方法でした。
※第一引数のopacityはCSS3のみ正常動作しますので、IE8以下は動作しません。
IE8以下も動作させるには以下をCSSに追加すること
-ms-filter: "alpha( opacity=0 )";
filter: alpha( opacity=0 );

これで動いてくれます。

Posted in jQuery, プログラミング関連, 備忘録 | Tagged , | Leave a comment

[jQuery]複数要素のアニメーションを同時に動作させる

思いつきでやったら出来たので記録
単体の要素に複数のアニメーションを同時に行うには
$("#image").animate({
    opacity:1
},
{
    duration: 3000,
    queue: false
})
.animate({
    marginLeft:300
},
{
    duration: 3000,
    queue: false
})
のように記述すれば簡単にできる。
じゃあ別要素のアニメーションは?っと悩んでやってみたらできた
以下ソース
$("#image").animate({
    opacity:1
},
{
    duration: 3000,
    queue: false
})
$("#slideZone").animate({
    marginLeft:300
},
{
    duration: 3000,
    queue: false
})
普通に別要素を一緒に動作させたいアニメーションと同じ階層においてqueueをfalseにすればできました・w・
ちなみにqueueは同時に動作させたいアニメーションだけ指定すればOKです
例えば。。。
id=”slideZone”と一緒に○○要素を移動したい!
の○○要素だけに指定するだけで、親となるslideZoneには指定する必要はありません。
以上複数要素のアニメーションの同時動作でした。

※2012/07/05 一つ目の例でqueueの値がtrueになっていたので修正しました。

Posted in jQuery, プログラミング関連, 備忘録 | Tagged , | Leave a comment

[jQuery]アニメーションの作成

Queryでのアニメーションの作成
//========スライド移動処理=====================
$("#slideItem").animate(
{
    marginLeft : -1000
},
{
    duration:2000,
    queue: false,
    complete: function() {
    [callback関数処理]
}
})

animateについて、

  • 一つ目の引数でアニメーションの内容を指定
  • 二つ目の引数でoptionsの指定

※現在のソースは左へ2秒かけて1000px移動する

 

これはリファレンスのanimate(params, options)によるアニメーション

別にanimate(params, [duration], [easing], [callback])による宣言も可能

※記述方法が若干違うので好みでお使いください。

今回は詳細に設定できる(であろう)方法を使用しました。

 

optionsの内容は以下

  • duration
  • easing
  • complete
  • step
  • queue

詳細はここがわかりやすいです

http://stacktrace.jp/jquery/api/effects/animate(params,options).html

 

今回はこちらの方法だけを紹介します。

気が向けばもう一つの方法も。。。

Posted in jQuery, プログラミング関連, 備忘録 | Tagged , | Leave a comment

投稿テスト

初回投稿!

宜しくお願いします~

Posted in 備忘録 | Leave a comment