2014年6月14日土曜日

ワールドカップがキター

ブログの更新をさぼっている間にワールドカップが始まりましたね!(マテ
私は高校生まではサッカー漬けの日々を送っていたので、いつもサッカーの試合となると自分もフィールドにいるつもりで観戦してしまいます。

開幕戦のブラジル対クロアチア。おもしろかったですねー。
特に目を引いたのはシュート性のゴールに向かうクロスでした。
クロアチアはこれで1点をブラジルからもぎ取りましたね。

これは相手DFが触ってもゴールが狙えるので点が入る確率が上がります。
しかし、これはFWが触れません。なぜならFWはマイナスのクロスを想定して動くからです。サッカーはスペースを奪い合うスポーツです。誰かが動けば必ずスペースは生まれます。
クロスをあげる人が切り替えしをすることで、相手DFはディフェンスの再構築をしなければなりません。そこで必ずスペースが生まれます。クロスをあげる人がまるでファンタジスタですね。このスペースが得点のにおいを感じさせます。ほんとに一瞬ですけどね。

サッカーを観戦するときに、空いてる人ではなく空いてるスペースを見つけながら観戦するのをおすすめします。とてもエキサイティングですよ。

2014年4月20日日曜日

Genymotionを導入してみた

eclipseのエミュレータでandroid4.4.2のテストをしたかったのだけど、
どうにもこうにもTheme.Holo.Light.NoActionBar.TranslucentDecorの状態が作れなかった。スキンに問題あるのかな。

そんなわけでGenymotionを導入してみました。
試してみたところTheme.Holo.Light.NoActionBar.TranslucentDecorが反映されていることが確認できました。しばらく使ってみよう。
4.4の実機がほしいです。

4.4のアクションバーも含めて透過

ぼへーっとStackOverFlowを見てたら面白そうなのがあった。
http://stackoverflow.com/questions/19746943/why-cant-we-use-a-translucent-system-bars-with-and-actionbar

アクションバーも含めて透過してる。
からくりとしてはアクションバーの背景を透過する。
んで、activityの一番上のレイアウトに色をつける。
そうするとその一番上のレイアウトの色がステータスバーとアクションバーの背景として見える。

おもしろいけど、個人的にはちょっと見づらいかな。
でもアプリのカテゴリーを表示する色として使うとかならありなのかなぁ。

2014年4月18日金曜日

というわけで

ステータスバーがレイアウトに被るような場合のレイアウトのサイズが見れるものを作ってみた。
https://play.google.com/store/apps/details?id=ahscode.statusbaronscreen
https://github.com/ahscode/teststatusbar

androidのdimenのapilevel15~19を確認したけど、公式ではステータスバーの高さは25dipだった。
マージンなりパディングなりは25dipでとれば大丈夫そうだけど、滲んだりするといやだから追加で8dipくらいとればいいのかな。

kitkatの実機がほしいです。

2014年4月17日木曜日

kitkat対応

盲点だった。

kitkatでは新しいテーマで
android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor
というのがある。
こいつはステータスバーが透明になる。
かつ、Viewのコンテンツ領域がDisplaySizeと等しくなる。
そしてコンテンツ領域に被さるようにステータスバーがある。

この被さるというのを考えてなかった。
コンテンツ領域がステータスバーに被ってしまう。

じゃあ、他のバージョンもこれに似た状況にしないとね。
というわけで、ActivityのsetContentViewの前に、

というのを呼び出すと、ステータスバーがコンテンツ領域に被るようにできる。
他のバージョンでも透明になったらいいのになぁ。

2014年4月16日水曜日

FragmentPagerAdapterで登録しているFragmentの完全取得

ViewPagerのアダプターにFragmentPagerAdapterを使っている場合、
mAdapter.getItem(int position)で返ってくるFragmentはその実体ではない。
具体的に言うと、メンバ変数として登録したレイアウトなどへのアクセスが全てnullになる。
staticなものとかfinalは試してません。

じゃあ、どうやってアクセスするの?
ということで、surpportv13にある実装を見てみる。
コンストラクタのFragmentManagerを使って内部でタグをつけてaddしていた。

そんなわけで真似して呼んでみたらnullじゃなかった。
FragmentがもつViewの入れ替えもできた。

なんだろう。こう、もにょる。
それなら自分でsupportv4のPagerAdapterを拡張しておれおれFragmentPagerAdapter作ったほうがいいような気がしてきた。

全部のFragmentを必ず最初にattachしてonCreateは呼ばせたいが、そうなると今度はViewPagerの根本的な拡張になるんだろうなー。

具体的にはこんな感じで試してみました。

2014年4月15日火曜日

とあるDragAndDrop

ドラッグアンドドロップのやっているところで簡単なテストアプリを作ってみた。
onDragListenerのテストでございます。
やりたいことは、
・レイアウト内にあるViewを他のレイアウトにドラッグアンドドロップする
こんだけ。

で、試しにやってみたところうまくいかなかった。
エラーで、
 E/AndroidRuntime(12379): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

これが出る。何ぞこれ?と思って調べたところ、
Kazzzの日記 Viewの階層を入れ替える
http://d.hatena.ne.jp/Kazzz/20100603/p1
というサイト様で図解が出ていた。

ほむほむ。
親との縁を切れと(違

冗談はさておき、元のparentとの関係を無効(removeView)にして宙ぶらりんにした後、
新しい親に加わえる(addView)。invalidateではだめでした。

最初はアニメーションの関係かなぁと思ったのでpostDelayしてみたりしたがだめでけっこう行き詰ってました。だってview init<うんたらかんたら>とかいうエラーが出たし。
さらにMainActivityの匿名クラスでやってたもんだから、参照がわけわかめになっていた。

そんなわけで、匿名クラスを全部外に出し、やりとりは全て独自インターフェイスにして、必要なものだけActivityのメンバ変数にした。

以下ソース。