2014年6月2日月曜日

Android : RadioButton を xml でカスタマイズ


このエントリーをはてなブックマークに追加
<style name="CustomRadioButton" parent="android:Widget.Holo.CompoundButton.RadioButton">
        <item name="android:layout_width">@dimen/radio_item_width</item>
        <item name="android:layout_height">@dimen/radio_item_height</item>
        <item name="android:background">@drawable/radio_item</item>
        <item name="android:button">@null</item>
        <item name="android:gravity">center</item>
</style>

android:button が、デフォルトのチェックマーク(丸ポチ)。
これを @null で消して、background に自作の drawable を使う。
background の drawable には selector を利用する。
(gravity を center にしているのは text を中央にするため)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:shape="rectangle" android:state_checked="true">
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#333333" />
            <solid android:color="#ccc" />
        </shape>
    </item>


    <item android:shape="rectangle" android:state_checked="false">
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#333333" />
            <solid android:color="#eee" />
        </shape>
    </item>
</selector>
button の方をカスタマイズする場合、常に left 側に描かれるよう点に注意する必要がある。
button の drawable を中央に置くことや、button の drawable で border を描画する、
などはできない。(幅と高さが完全に固定なら、shape drawable の size を指定すればできる?試してはいない)
参考: android RadioButton button drawable gravity

2014年5月28日水曜日

Android : Dropbox Datastore API を Android Studio で使う


このエントリーをはてなブックマークに追加
Using the Sync API with Android Studio

上記の公式ブログにある設定手順を参照。
タイトルは Sync API ですが、本文中に「Datastore API にも当てはまります」と書いてあります。

AndroidManifest の設定は Datastore API SDKs (Android) の方にあるのでそちらを参照。

2014年5月26日月曜日

AngularJS : (配列の)表示が更新されない場合


このエントリーをはてなブックマークに追加
ng-repeat でバインドしている配列をコード中で変更しても表示が更新されず、次に何か AngularJS の更新が入るタイミングで配列の表示も更新される、という症状が出ていました。

AngularJS not refreshing ngRepeat when updating array

調べた結果、ぴったりのものが見つかりましたが、配列だからという問題ではなかったです。
AngularJS のものでないコールバック関数(jquery など。自分の場合は Dropbox Datastore API でした。)の中で AngularJS の $scope の変数を更新した場合に起きる問題でした。

配列更新後、 $scope.$apply(); を呼ぶことで無事に表示が更新されるようになりました。

2014年5月20日火曜日

Unity : アニメーションの特定のタイミングで関数を呼ぶ


このエントリーをはてなブックマークに追加
参考 : 【Unity】 Unity4.3のMecanimのアニメーションイベントの使い方

参考先に全部書いてあって補足する事もないの説明省略。

2014年5月19日月曜日

Unity : 動く床に乗ったプレイヤーを動かす


このエントリーをはてなブックマークに追加
プレイヤー(操作対象)が動く床の上に載ったら、
プレイヤーを床の子オブジェクトにするという方法で実装。
(注意:子オブジェクトにするため、床オブジェクトのスケーリングがプレイヤーに適用されてしまいます。)
上に乗っている場合、という判定のために床自体の Collider とは別に
上側の面に Collider を追加した。



動く床のメインオブジェクトは MovingFloor。
MovingFloorParent は空のゲームオブジェクトで、
MovingFloor のアニメーションを相対座標で動かすために親を作っている。

空のゲームオブジェクトに Box Collider 2D (Is Trigger 有効) を付けたものを MovingFloor の子オブジェクトする(とりあえず Surface と命名)。プレイヤーと接触するよう MovingFloor よりも少しだけはみ出しておく。(全体を覆うと、下や横方向から接触した場合にもプレイヤーが動く床にくっついてしまうので、上だけ)

Surface にはプレイヤーの当たり判定で判別できるよう Tag をつけておく。

プレイヤーに付けたスクリプトの OnTriggerEnter2D で、
transform.parent が null の時に Surface に接触したら、
transform.parent = other.gameObject.transform;
としてプレイヤーを子オブジェクトにする。

transform.parent が null でない時に OnTriggerExit2D で
Surface と離れたら、
transform.parent = null;
として親子関係を切り離す。以下の様な感じ。

載った瞬間にピタっとくっつき過ぎる感じなのがちょっと微妙な気もするけど、
どうしたらいいんだろう?

2014年5月17日土曜日

『アドルフに告ぐ』 感想


このエントリーをはてなブックマークに追加


アドルフに告ぐ』(リンク先は1巻です)、最後(5巻)まで読み終わりました。
戦争、時勢、環境、教育の影響力について考えさせられる漫画でした。

全5巻で終わって、1巻は100円、その他は300円と安く、しかもページ数も普通の漫画より多め。
重い話なので読むのにちょっと力が入りますが、読んでみて良かったです。

こういうメッセージ力のある漫画を描ける手塚治虫先生は本当に凄い。 安易な「名言」や「名シーン」にまったく頼っていないところも凄い。話全体を使ってテーマを書いている感じがします。

今度は『奇子』とかも読んでみようかなぁ。『火の鳥』シリーズも、子供の頃いくつか読んだだけなのでまた読んでみたいものです。

2014年5月15日木曜日

Unity : StartCoroutine とスレッドセーフティ


このエントリーをはてなブックマークに追加
未だに Coroutine の挙動がよくわかっていません。。。

ふと「StartCoroutine で作ったメソッド内で変数を弄る時ってスレッドセーフにするよう考える必要あるのかな?」と思い、ThreadId を取得してみました。

Debug.Log("ThreadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());

void Update() 内で取得した ThreadId と、
StartCoroutine で始めた関数内で ThreadId は同じだったので、競合を考える必要はないようです。