2015年7月29日水曜日

TEX Yoda TrackPoint Keyboardを買いました。


アプリの開発とは全然関係ない話題ですが、TEX Yoda TrackPoint Keyboardを買いました。
写真右がそれで、左はHHKBLite、下が箱です。

このキーボードの特徴は、中央の赤い丸、トラックポイントがあることです。
マウスを動かすように、キーボードだけでポインター操作ができるので、手の移動が少なくて面倒くさがりにぴったりなキーボードなのです。

キーボードは組み立て済みにして、半田付けの手間を省いてもらいました。
事前にネットで調べたときには、キーを基板に半田付けをしなければならず?敷居が高く感じましたけれど、組み立ててもらうオプションがあるので気楽にオーダー出来て良かったです。

使用にあたっては、長らく使っていたHappy Hacking keyboard(HHKB) Liteと配列を近づけるべく、いくつかのキートップを入れ替えました。

慣れてないので、矢印キーとbackspaceをよく打ち間違えてしまいます。慣れですよね。

2015年7月19日日曜日

「しまりすの星」をリリースしました(Ver.2)


ミニゲームが続々追加される(予定)の「しまりすの星」をリリースしました。

---
ここはしまりすの星!
しまりすたちが手に職をつけて働く世界、せっせせっせと働く素敵なしまりすに育てよう!
----
というわけで、しまりすの手々をタッチして手に職をつけていきましょう!


まさか今になって、三角関数を使いまくるとは思いませんでした。
だいぶ苦闘して、ようやく2つ目のミニゲームを追加しました。

プライバシーポリシーについて

・入力情報を外部へ送信しません。
・インターネット接続権限は、AdMob広告のために使用されます。 


しまりすの星はこちらのページです。
https://play.google.com/store/apps/details?id=another.mrt.gmail.com.restar

2015年6月6日土曜日

新感覚ペットアプリ「石飼い」をリリースしました!


石です。


プライバシーポリシーについて

・入力情報を外部へ送信しません。
・インターネット接続権限は、AdMob広告のために使用されます。

ダウンロード

ダウンロードはこちらから
https://play.google.com/store/apps/details?id=another.mrt.gmail.com.stone

2015年5月27日水曜日

「しまりす タネがブー!」を公開しました!



シマリスにひまわりの種を食べさせては出させる、非常に際どいアプリを開発しました。

しまりす タネがブー!」といいます。


遊び方は簡単。

1.しまりすのお口に種をスワイプして食べさせてあげます。
2.膨らんだほっぺをタッチします。
3.ぶーと吹き出します。


プライバシーポリシーについて

・入力情報を外部へ送信しません。
・インターネット接続権限は、AdMob広告のために使用されます


ダウンロード

↓下記からダウンロード↓
https://play.google.com/store/apps/details?id=another.mrt.gmail.com.chipmunkandseeds

2015年5月16日土曜日

DialogFragmentの中にあるボタンから呼び出し元Fragmentにコールバックを渡したい

今回は技術の話です。

表題の件について、案外ハマりました。

もう少し詳しく書くと、こんな感じです。
・ダイアログを出す
・ダイアログの中にはListViewがある
・ListViewの中にはボタンがある
・ボタンを押したら、呼び出し元のfragmentでUI変更をしたい

メンドクサポイントは以下の二点です。
・ダイアログの中のリストの中のボタンのイベント処理(深いわ!)
・ダイアログのコールバック処理

ネットで調べまくると、やはりみんな苦戦しているようで、case by caseで対応の仕方も変わります。

ふと思ったのは、このUI設計自体、推奨されないのではないかと。
ダイアログはパソコン世代にはお馴染みのUIですが、ここで何か色々するということ自体が、スマートフォンなどデバイスでは、俗っぽい言い方をすると「イケてない」のではないかと思うのです。

さて、
私の場合は条件がシンプルで、解決したものをまとめるとこんな感じ。
例としてダイアログを出して、閉じるという処理を紹介します。

○MainFragment

1.宣言しとく

private FooDialogFragment FooDialogFragment;

2.呼び出す(onCreateView内とか)
    setTargetFragmentの引数一番目は、戻ってくるfragment。二番目は識別用に任意のリクエストコードを指定します。
Button FooButton = (Button) rootView.findViewById(R.id.btn_foo);
FooButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if(FooDialogFragment== null){
            FooDialogFragment= new FooDialogFragment();
        }
        FooDialogFragment.setTargetFragment(MainFragment.this,1234);
        FooDialogFragment.show(getFragmentManager(), "dialog");
    }
});
3.onActivityResultで受け取る
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == 1234) {
        if(resultCode == Activity.RESULT_OK) {
            FooDialogFragment.dismiss();
        } else if (resultCode == Activity.RESULT_CANCELED){
        }
    }
}

○FooDialogFragment

//該当部分のみですが
ListView listView = (ListView) dialog.findViewById(R.id.list);
listView.setAdapter(customAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(view.getId() == R.id.inner_button){
            Intent result = new Intent();
            result.putExtra("foo","name");
            if (getTargetFragment() != null) {
                getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, result);
            } else {
                PendingIntent pi = getActivity().createPendingResult(getTargetRequestCode(), result, PendingIntent.FLAG_ONE_SHOT);
                try {
                    pi.send();
                } catch (PendingIntent.CanceledException ex) {
                }
            }
        }
    }
});