スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Androidアプリのアプリアイコンを設定する方法

Eclipseでプロジェクトを作成した場合、最初からデフォルトのアプリアイコンが設定されているので、これを置き換えればよい。

画面サイズに応じて3種類のアイコンが必要で、それぞれのサイズに応じたフォルダに設置する。

res/drawble-hdpi/icon.png ... 大サイズ(72×72px)
icon.png

res/drawble-mdpi/icon.png ... 中サイズ(48×48px)
icon48.png

res/drawble-ldpi/icon.png ... 大サイズ(36×36px)
icon36.png

これだけでOK。

スポンサーサイト

アラートダイアログ終了時のイベントを処理する方法

Androidのダイアログは、見た目がモーダルダイアログのように見えるけど、実際はモードレスダイアログになっている。
アラートダイアログも例外ではなく、呼び側ではダイアログの終了を待たずに制御が返る。
そもそも、AndroidでUIスレッドを止めるのはご法度らしい。

そこで、下記のようなコードでリスナーを登録してイベントを発生させることになる。


    // ダイアログの表示
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
    alertDialog.setTitle("タイトル");
    alertDialog.setMessage("メッセージ");
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // ボタン押下時の処理
        }
    });
    // キャンセルイベント
    alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        public void onCancel(DialogInterface dialog) {
            // キャンセルの処理
        } 
    });
    alertDialog.show();


注意しなければならないのが、「OK」ボタンのみだからと言って、キャンセルが発生しない訳ではないこと。
ハードウェアキーの戻るボタンを押すとキャンセルが発生する。
閉じたタイミングで何かをしようとしていると、キャンセルも考慮しないと処理抜けになる場合も。

Androidでビューやボタンの簡易アニメーションを実現する方法

Android SDK では、ImageViewやボタンなどのオブジェクトに対して、簡単にアニメーションが実現できるようになっている。
アクションゲームなどの本格的なアニメーションは、SurfaceView や OpenGL ES などを使うのが一般的らしいけど、そういったアプリでなければ、今回紹介する方法でも十分だと思う。

【透明化(フェードイン/フェードアウト)アニメーション】

AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
alphaAnimation.setDuration(1000);
alphaAnimation.setFillAfter(true);
image.startAnimation(alphaAnimation);


AlphaAnimationクラスのコンストラクタの引数で透明度を指定する。
第1引数はアニメーション開始時の透明度(0.0f-1.0f)を指定。
第2引数はアニメーション終了時の透明度(0.0f-1.0f)を指定。

setDuration()の引数では、アニメーション開始から終了までの時間をミリ秒単位で指定する。

setFillAfter(true)を呼ぶと、アニメーション終了時の表示状態をキープする。falseを指定すると、アニメーション開始時の表示状態に戻る。

【拡大/縮小アニメーション】

ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.0f ,1.0f ,0.0f,
        image.getWidth()/2, image.getHeight()/2);
scaleAnimation.setDuration(1000);
scaleAnimation.setFillAfter(true);
image.startAnimation(scaleAnimation);


ScaleAnimationクラスのコンストラクタの引数で拡大/縮小率を指定する。
第1引数はアニメーション開始時のX軸方向の表示倍率
第2引数はアニメーション終了時のX軸方向の表示倍率
第3引数はアニメーション開始時のY軸方向の表示倍率
第4引数はアニメーション終了時のY軸方向の表示倍率
第5引数は拡大/縮小の基点位置(X座標)
第6引数は拡大/縮小の起点位置(Y座標)

その他の指定は、他のアニメーションと同様。

【回転アニメーション】

RotateAnimation rotateAnimation = new RotateAnimation(0.0f, 360.0f,
        image.getWidth()/2, image.getHeight()/2);
rotateAnimation.setDuration(1000);
rotateAnimation.setFillAfter(true);
image.startAnimation(rotateAnimation);


RotateAnimationクラスのコンストラクタの引数で回転角度を指定する。
第1引数はアニメーション開始時の角度
第2引数はアニメーション終了時の角度
第3引数は回転する基点位置(X座標)
第4引数は回転する基点位置(Y座標)

【移動アニメーション】

TranslateAnimation translateAnimation = new TranslateAnimation(-10.0f, 10.0f, -10.0f, 10.0f);
translateAnimation.setDuration(1000);
translateAnimation.setFillAfter(true);
image.startAnimation(translateAnimation);


第1引数はアニメーション開始時の位置(X座標)
第2引数はアニメーション終了時の位置(X座標)
第3引数はアニメーション開始時の位置(Y座標)
第4引数はアニメーション終了時の位置(y座標)

これだけのコードでアニメーションが作成できるので超便利!

なお、見た目だけでなく、実際にビューが拡大したり移動したりしているので、ビューを配置しているレイアウトの枠を超えることは出来ない。また、文字入力などのOSが制御している操作と絡めると、アニメーションがカクカクになる場合もあるので注意が必要。iPhoneアプリでも同じような方法でお手軽アニメーションを作成できるが、こちらの方が滑らかに動くので、Android版は少し見劣りする印象も。現在、iPhoneアプリの「タイピング革命」をAndroidに移植中だが、文字入力と同じタイミングでアニメーションさせると、表示がカクカクになるため苦労している。。

タイトルバーを消す方法

アプリ実行時にデフォルトで表示されるタイトルバーを非表示にするには、onCreate()メソッド内のsetContentView()を呼ぶ前に以下のコードを呼べばよい。


requestWindowFeature(Window.FEATURE_NO_TITLE);



一応使用例を。


    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

        // タイトルバーを非表示にする
        requestWindowFeature(Window.FEATURE_NO_TITLE);
       
        // 画面の XML を指定する
        setContentView(R.layout.game_main_activity);
    }


画面起動時にソフトキーボードを自動的に表示する方法

画面を開いた時にソフトキーボードを開く方法をWEBで調べてみたところ、結構多くのサイトでやり方が紹介されていた。
しかし、実際にやってみると上手くいかないやり方が多く、思った以上に苦労した。WEBの情報でも、エミュレータでは上手くいくけど実機ではダメとか、その逆も。更には、機種によってうまくいかないとか・・・。どうやら機種依存がありそうな雰囲気。

私の所有しているEVO WiMAXとminipad-s(中華Pad)では、下のやり方でソフトキーボードを表示することに成功した。

まず、Activityが表示されたタイミングで、EditTextコントロールにフォーカスを与える。


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // フォーカスをセット
        editText.requestFocus();
     }


次に、EditTextコントロールがフォーカスを受けた時の処理を追加する。ここでソフトキーを表示するコードを書けば実現できそうな気がするが、残念ながらそれでは無理だった。フォーカスイベントから抜けた後にコードを書けばうまくいくことが分かったので、ソフトキーを表示する処理を遅延呼び出しすることに。


    // ウィンドウのフォーカス変更イベント
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        // EditTextのインスタンスを取得
        EditText editText = (EditText)findViewById(R.id.dmyText);
       
        // EditTextがフォーカスを取得した場合
        if(hasFocus && editText == getCurrentFocus()) {
            new Handler().postDelayed( showKeyboardDelay , 10);
        }
    }


そして最後に、上記のコードでPOSTされるメソッドを実装する。


    // ソフトキーボード表示の遅延実行処理
    private final Runnable showKeyboardDelay = new Runnable() {
        @Override
        public void run() {
            EditText editText = (EditText)findViewById(R.id.dmyText);
            // ソフトキーボードを表示
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(editText, 0);
        }
    };


10msecとしているが、どのぐらいの時間が妥当なのかは良く分からない。1msecでも問題ないのか、タイミングや機種によってダメなのか・・・。まぁ、もう少し値を調整しながら検証してみようと思う。(試した方は情報をいただけるとありがたいです)

予断だが、iPhoneの場合は↓のような感じで対応した。
キーボードを自動的に表示する方法 - あらきんぐのiPhoneアプリ開発ブログ
Androidアプリ紹介
リリース中のアプリはまだありません。
iPhoneアプリ紹介
タイピング革命
フリック入力はタイピング革命で練習しよう!ネットランキングがウリのタイピングアプリ

icon-l-typing.jpg

初心者も安心のトレーニングモード搭載!リプレイ機能でオンラインランキング上の達人のプレイを見てみよう!



簡単3Dカメラ
iPhoneで手軽に3D写真を楽しもう!平行法/交差法/アナグリフ/グラグラ3Dに対応。
icon-l-3d.jpg

2枚の写真を撮影するだけで、裸眼で立体視できる3D写真が作成できます。平行法、交差法、アナグリフ、グラグラ3Dと多彩なモードを搭載。85円でこの機能を体感できるのは簡単3Dカメラだけ!

プロフィール

あらきんぐ★

Author:あらきんぐ★
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
アクセスランキング
[ジャンルランキング]
携帯電話・PHS
276位
アクセスランキングを見る>>

[サブジャンルランキング]
Android(Google)
68位
アクセスランキングを見る>>
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。