月別: 2015年4月

これでもくらえ!バーニングブック!ヽ(`Д´)ノ -5

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


コモンインテントを訳した。

内容自体は簡単だが、レイアウトというかフォーマットを似せる作業で死んだ_| ̄|○

このページの文字データは一月以上前にコピーしてテキストファイルに貼り付けて
おいたものだったが、今ページを見るとFitnessのカテゴリがなくなっていた。
謎だ(´・ω・`)

前にもどっかのページであったがアンカーミスがあった。ごっぐるは404を返す
リンクミスには機械的に対応出来るが、ページ自体は存在して200を返してしまう
アンカーミスには弱いようだな。まあアンカーリンクがあった場合に目的のページを
解析していちいち対応するアンカーをチェックするのは徒労に近いか。

commonを”共通”や”一般的な”と訳そうと思ったが、予め用意されているインテント
という特殊性とそぐわない気がして結局”コモン”のままにした(ノ∀`)
しいて言えば各プログラマが使えるという意味では”共通”の方なんだろうか?

insteadとかmustが繰り返し出現して、文章的にどうなんだろうかと思ったが
単なる消し忘れだったのだろうか?


何故か魂を削られるようなページであった…(ヽ’ω`)
あんまり翻訳作業で知識が得られる感じではないからか

タイトル指定をしていなかった(ノ∀`)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


動的に連番の画像リソースのidを取得するような方法があるのだろうかとぐぐったら、
なんかそれらしきものがあった。
R.drawableの設定

まあ一応これで出来たけど、idは内部でキャッシュして使いまわすべきなんだろうか?


ファイル選択ダイアログのサンプルをぐぐったら、AlertDialogでファイル一覧から選択させて開く
というページがあって、ここが参照しているのがAndroidでファイル選択ダイアログを使うという
ページで、ここにあったリンク先がダイアログを制するものがAndroidを制する!で、てっきり
内容的に関係があるのかと思って読んでいたが、ここは基本的な使い方を説明していてファイル
選択ダイアログとは関係がなかった(ノ∀`) まあ勉強にはなったのでいいのだけれどもw

なんかsetButtonがdeprecatedらしくてマークがついてた。
よくわからないがAlertDialog.BUTTON_POSITIVEを第一引数に入れておいた。

setButton(CharSequence text, DialogInterface.OnClickListener listener)
This method was deprecated in API level 3. Use setButton(int, CharSequence, 
android.content.DialogInterface.OnClickListener) with BUTTON_POSITIVE 

ICS以降をターゲットにしてるから関係ないけどICSより前と以降とではボタンの位置が
変わってくるのか。
Android AlertDialog BUTTON_POSITIVE / BUTTON_NEGATIVE order

しかし考えてみると、選択した値はHandlerで伝えてもいいのか。どっちがいいんろう。
プリファレンスアクティビティだけで使う予定だからリスナを使った方がいいのか?


外部フォルダのパスを取得しようと思ってサンプルをぐぐってみたら、
なんだか色々と複雑な感じ(´・ω・`) That’s a cloth.

ヒットしたストレージのパスを取得するというエントリのコードを流用してけれども、何か
うまくいかない。取得したパスを見てみると”/storage/emulated/0/”という謎のパス。
なんだこれはぐぐってヒットしたページを眺めてみた。
Android 4.3あたりから外部SDのパスが変わった?
マルチユーザ対応 Android 4.2以降の内部ストレージと外部ストレージ

なんだかよくわからない(´・ω・`)
まあつまるところ今までさえ何か歪んだ状況だったのに、それに更にマルチユーザー対応が
絡んで来て更に昏迷の一途を辿っているのかな。

Android におけるストレージまとめを見たら、外部公開共有領域のパスが欲しいので
Environment.getExternalStoragePublicDirectory()を使えばいいのかな

よくよく考えてみるとこの内容、トレーニングで翻訳していたような気がしてきた( ;・´ω・`)ゴクリッ


何か調べ物とそれの関連項目に目を通しているだけで時が過ぎ行く…(ヽ’ω`)
この手のことも覚え書きしておかないとすぐ忘れてしまうので書いておかないといけない。
まあ覚え書きしておいても思い出さない場合が多いんだけれど(ノ∀`)

最近凄く眠いが春眠暁を覚えずというには時期外れなので五月病の先駆けに違いないと考えることにした(´・ω・`)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


単に暑くなってきて、体力の消耗が増えただけかもしれない(ノ∀`)


シークバーの使い方やらJavaDocを眺めてから、

ちょろっと
シークバーのプログレス部分のカスタマイズ
シークバーのサムのカスタマイズ

mokkouyouの開発日記 SeekBarの見た目(style)を設定
とサンプルを試した。

上の2件は同じサイトのものだが、画像ファイル名とxml内での指定が一致していなくて
エラーになった(ノ∀`) time_かcustom_progress_のどちらかに合わせたら普通に動作した。
3つ目は断片的なので一瞬?となったが他のサンプルや他のページを見て補完して動作を
確認した。一応シークバーのカスタマイズ方法はなんとなくわかった。

未来の俺氏が忘れた時の為に、というかきっと忘れてしまうので今回行った作業の手順を
記しておくかのぅ(“・ω・゙)

  1. 新規のAndroidプロジェクトをデフォルトで作成。(最小必須SDKだけは4.0.3以上に。低すぎるとサポートライブラリが追加されたりして色々と面倒くさい)
  2. activity_main.xmlのグラフィカルレイアウトで[フォーム・ウィジェット]-[SeekBar]を選択してActivity上にドラッグ&ドロップする。
  3. resフォルダ内にdrawableフォルダを作成する。
  4. drawableフォルダ内にシークバーの各itemを設定する為のxmlを作成する。(プログレスバー用とサム用にそれぞれ作った)
  5. 差し替える画像をdrawable-hdpiに入れる(drawable系のフォルダならどれでもいいのか)。
  6. activity_main.xmlで「android:progressDrawable=」や「android:thumb=」に上で作ったxmlをそれぞれ指定する。

関係ないがリストの文頭?を揃えるのは<li>にtext-indent:-1em;padding-left:1em;を
追加すればいいのか。
【CSS】番号付きリストとかをテキストで作った時の頭揃えの方法
つーかCSS使え、俺氏ヽ(`Д´)ノ


まだ目を通してないが、後で必要になったら読む。
Android SeekBar のトラックとつまみの位置を合わせる
AndroidのSeekBar Thumb位置ずれ問題の解決方法(横・縦)
[android]seekBarをかいぞう

今のところ発生していないみたいだが発生したら読む。
AndroidのProgressBar / SeekBarに画像を使う
AndroidのProgressBar / SeekBarでsetProgressDrawable / setThumbを2回以上すると消える


アニメーションをどうやるのかなと思いぐぐる。ヒットしたAndroidでアニメーションしたい
読んだが、スニペットなのでよくわからない(´・ω・`)

一見読みにくそうに思えたがBlog kon: (Animator)図形を動かすは全コードが載っていたので、
これを実行。動いた(・∀・)
上のスニペットもこちらの形に組み入れて動作確認をした。

デフォルト作成したプロジェクトを変更したのでレイアウトファイル名を変更した。
昔のAndroidってデフォルトのレイアウトファイルってmain.xmlだったんだっけ?

Androidメモ プロパティアニメーションのサンプルは画像をダウンロードするという手間と、
Activity名とマニフェストファイル内での記述をどちらかに合わせる手間があるが
レイアウトファイルに依存しないので動作確認は簡単だった(・∀・)

色々と試したが、今のところ実験段階なのでカスタムSeekBar内にlongを持たせて
それをonDraw時にインクリして一定カウント後にsetThumbで絵を変更するという
適当な実装にしているのでまだ組み込んでいないw いずれ必要になったら組み込む。


getDrawable()を使おうとしたらdeprecatedになっていた。
Android getResources().getDrawable() deprecated API 22
APIレベル22はAndroid 5.1か。

Themeのところはnullを指定しても良いみたいだな。

getDrawable(int id)
This method was deprecated in API level 22. Use getDrawable(int, Theme) instead.


詰まってはいないけど、色々と調べることが多いな(ヽ’ω`)

おっぱいとして進まない(´・ω・`)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


違った、遅々として進まない(´・ω・`) ドントプログレスアズアファーザー コレモチガウナ


Common Intentが思ったよりもボリュームがある…(ヽ’ω`)
同じような定型文が多いので翻訳自体は楽なはずだが、
似たような内容なのでモチベーションがあんまりあがらないw

文中に

specify the MIME type to one of the content types

という文があって、ちょっともにょる(´・ω・`)

MIME typeとone of the content typesの場所が逆なら、
「MIME typeにcontent typeの内の一つを指定する」と適当に訳せる気がするんだけども、
これだと
「content typeの内の一つにMIME typeを指定する」という訳になってしまう気がする。

これが

set the MIME type to one of the content types

というset A to Bという文なら、辞書的にそういう用法はあるので納得出来るのだが、
どうもspecifyにはこの用法はないみたい。

そもそもspecifyは

1
本来,「明記する」,「明確に言う」という意味をもっているが,コンピュータの分野では,「指定する」という意味で多く用いられる.
specify

ということらしい。そういうことを踏まえるとコンピュータ分野でsetとspecifyが
似たような意味を持つことからsetの用法をspecifyに流用するようになったという
ことなのかなぁとどうでも良いことが気になった(ノ∀`)
 


 
シークバー問題は色々と処置を施したら問題なくなった。当初は1秒ごとのブロードキャストでの
更新に頼っていた為、タッチ後にタイムラグが発生していたが、onProgressChangedでも
ブロードキャストするようにしたら、ほとんど気にならない感じに。他のアクションでも
同じようにすべきか。

シークバー操作後の表示時間の同期をどうするか悩んだが、シークバーからの値から
逆算することにした。Chronometerと比較すると数百ミリ秒早いような気がしたが、
これはブロードキャストのタイミングや逆算時に四捨五入等の絡みのようなものだと思うので

気にしないことにした(・∀・)

今後は俺氏は昨今のユーザーエクスペリエンス重視の流れに反旗を翻し、プログラマー
エクスペリエンスという新たな概念を創出し、その路線を重視することにした(`・ω・´)

※プログラマーエクスペリエンスとは即ち、ユーザーエクスペリエンスなんか一切考慮せず、
適当に考えた機能を適当に力業で実装して、「わーい、俺天才(・∀・)」と自画自賛して
自己満足的に気持ち良くなる体験を指す。


まあ実際のところ、普通に音楽を聞いてる人にとって極めて正確な経過時間や
シークバーは大して重要ではないし、普通にシーケンシャルに聞きなさいと思うw

そんなことを言うと「じゃあなんでシークバーつけたんだ バーヤバーヤヽ(`Д´)ノ」という
話にもなってくるが、これは通常の音楽再生時を想定してつけたものではなくて、例えば、
落語や英会話等の学習用データ、映画やテレビの音声等の1件の長さが数十分に
及ぶものを再生する時や通常の音楽でもすぐにある部分を聞きたい時に必要になる
であろうと思いつけた。具体的に言うと、途中まで聞いた落語を改めて聞く時や録音した
テレビ番組の音声に

「J( ‘ー`)し ごはんよー」
「あ、あ、あ、もー今録音してたのにー、かーちゃんのばかばかばか(´;ω;`)」

などというやり取りが入っていてそれを飛ばしたい時、会社まで或いはその最寄駅まで
あと1-2分、でも今聞いてる曲のサビが好きで聞きたいけど、まだ始まったばかり等々。

一応巻き戻しボタン、早送りボタンを用意し、その移動単位をユーザーに変更させる形で
実装しようと思ってはいるが、やはり数十分の移動は面倒くさいと思う。


サービス側とアクティビティ側でそれぞれ同じTrackの配列を持っていて、これを
どうにかしようと悩む。最初はアクティビティ側で持っておいてサービスに渡そうと
したが、よくよく考えてみるとアクティビティはフリックした時に破棄されるので
データを維持出来ないというか各アクティビティで共有出来ない(ノ∀`)

ではサービス側に持たせるかと思ったが、インテントで渡すには
serializableやらParcelableを使わないといけないらしくてなんかめどい(´・ω・`)

めどいなぁと思ってぐぐったらApplicatonクラスなんてものがΣ(゚∀゚;)
Activity間やサービス間でデータを共有する方法
Applicationクラスを継承して、データの共有をする。
独自のApplicationクラスを作る

軽く目を通して適当にApplicationクラスを継承したクラスを作って、元からあった
MediaRetrieverクラスのネット絡みの部分を削除してローカルデータ用に書き直したり
したら、まあなんとなく上手く行ったような…気がする。各アクティビティ内のListFragmentも
Application継承クラスから配列を取得するようにした。

当初は取得終了する前にフリックすると落ちるというあほなエラーに愕然としたが
ジェスチャーディテクターにbooleanを用意してApplication継承クラスでの取得が
終了した後にそれをtrueにしない限りフリックをさせないようにして回避した。
美しくないような気がするが( ゚ 3゚)キニシナイ

なんとなくAndroidってエントリポイントが決まっていないというか、各コンポーネントが
独立した存在として在るべきで、そのコンポーネント間のやり取りは基本的に
インテントを使ってやりなさいという感じなのかと思っていたので、こんな
グローバル変数の塊になりそうなクラスが存在しているのに驚いた(・∀・) フシギ
まあグローバル変数大好きっ子だから嬉しいんだけどもw


まだ少しControllerView絡みはSeekBar絡みで頑張らねばならぬことがあるな(ヽ’ω`)