お・ぼ・え・が・き (´-人-`)


Androidだと最初からカラー変換用のstaticメソッドがあるんだな(・∀・) ラクデイイ
Color.parseColor(String colorString)
android – How to get a Color from hexadecimal Color String


配列内にある数値が入ってなければ、追加するみたいなコードを書きたくてぐぐった。
JAVAの課題で困ってます。

Arrays.binarySearchというのが使えるのか(・∀・)と思って試していてはまった_| ̄|○
挙句の果てに当初の目的には使用出来なかった…__o_

if(binarySearch(array, value)==-1) 

みたいなコードで良いのかと思ったが、どうしても期待通りに動いてくれない。

ソースを見た。よくわからない(´・ω・`) エイゴヨムノメドイ

/**
     * Performs a binary search for {@code value} in the ascending sorted array {@code array},
     * in the range specified by fromIndex (inclusive) and toIndex (exclusive).
     * Searching in an unsorted array has an undefined result. It's also undefined which element
     * is found if there are multiple occurrences of the same element.
     *
     * @param array the sorted array to search.
     * @param startIndex the inclusive start index.
     * @param endIndex the exclusive start index.
     * @param value the element to find.
     * @return the non-negative index of the element, or a negative index which
     *         is {@code -index - 1} where the element would be inserted.
     * @throws IllegalArgumentException if {@code startIndex > endIndex}
     * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length}
     * @since 1.6
     */
    public static int binarySearch(int[] array, int startIndex, int endIndex, int value) {
        checkBinarySearchBounds(startIndex, endIndex, array.length);
        int lo = startIndex;
        int hi = endIndex - 1;

        while (lo <= hi) {
            int mid = (lo + hi) >>> 1;
            int midVal = array[mid];

            if (midVal < value) {
                lo = mid + 1;
            } else if (midVal > value) {
                hi = mid - 1;
            } else {
                return mid;  // value found
            }
        }
        return ~lo;  // value not present
    }

~ってなんだよヽ(`Д´)ノと思ったら、「ビットごとのNOT演算(各ビットの反転)を行う。」
ということらしい。(Javaの道:演算子(5.ビット演算子))

ビット演算の理解はかなり低いのでデバッガで戻り値を見てみる。

-11(´・ω・`)?
なんじゃそりゃと思ってloの値までしっかり見てみると、
ビット演算前のloの値は「10」。「10」というのは配列の長さと一緒で、
それをNOT演算したから「-11」か。

最初は-(array.length+1)で判定するというアレな書き方をした。
後で~array.lengthで良いことに気づいた(ノ∀`)

取り敢えず期待通りの動きをした∩( ・ω・)∩ バンジャーイ
と喜んだのも束の間、更にぐぐってみて絶望のどん底に叩き落とされる。

java.util.Arrays.binarySearch で二分探索
binarySearchについて
を読んで気づいた。

ソースのコメントにもあるが戻り値は

@return the non-negative index of the element, or a negative index which is {@code -index – 1} where the element would be inserted.
存在する場合は負ではない要素のインデックス、又は要素が挿入されるであろう、-位置-1である負のインデックス

ということであり、それは配列の内容と検索する値によって
戻り値が変わるということを意味する( ;・´ω・`)ゴクリッ
つまり期待していた使い方は出来ない…

返して、私の純情と数時間を返して。・゚・(ノД`)・゚・。

最終的にはTrueの場合のindexをArrayListに入れる形でやっつけたw


国際化ってどうすんだっけと自分の翻訳したものを読んだ。
珍しく役に立った(・∀・) 最初、values-jpにして読み取れずに悩んだのは内緒。
values-jaが正解だった(ノ∀`) ISOいくつかで決まってるリージョンコードだか
なんかだっけか。

様々な言語のサポート


デフォルトのフォントだと美しくないのでフォントの変更方法をぐぐる。
setTypeface()というメソッドで良いらしい。本来ならView等に直接指定をすれば
良いようだが、うちでは変態的なプログラミングをしているので、drawText()時の
引数であるPaintでsetTypeface()することにした。

でも考えてみるとフォントなんて何が入ってるかわからないけど、ユーザーに
選択させるのもなんなので同梱したフォントを指定する方法をぐぐる。

assetフォルダにあるフォントファイルを読みこめば良いらしい。
Android端末の組み込みフォント以外を使用する


フリーフォントをぐぐる。モトヤシーダ辺りが良さ気に見えたけど、
商用だと有料らしいのでパスした。商用で使うわけではないが何となく
面倒くさそうなものはパスや(・∀・)

結局自家製 Rounded M+をダウンロードして試した。
最初は「60MBってなんでそんなにでっかいんや(´・ω・`)」と思ったが、
マイナーな違いでフォントファイルが複数含まれているだけだった。
一つ辺りは3MB程度なので他のフォントファイルとほぼ同じ大きさだった。

一応フォントの変更は出来たけれども、なんかボタンサイズがおかしいw
2.3.3以降では正しく描画されるのに2.2だとおかしい。2.2の頃だと
元々の組み込みフォントじゃないとpaint.measureText()が正しく働かないのかな?
※2014-07-26追記 paint.getFontMetrics()だった(ノ∀`)

2.22.3.3

まあ2.2だったらsetTypeface()しないようにすればいいだけかな。


エミュレータのショートカットってctrl+F12しか知らんかった(ノ∀`)
Androidエミュレータのショートカットキー一覧