Infinito Nirone 7

白羽の矢を刺すスタイル

SparseArray から要素を取り出したときに ClassCastException が発生するパターン

SparseArray は Android のフレームワークにあるコレクションの一種で、Integer を key にした HashMap よりもメモリ効率がよいとされるコレクションです。 SparseArray には 2 通りの値を取り出すメソッドがあります。一つはSparseArray#get(int)もう一つは…

例外をネストしたクラスとして定義するときは必ず static なネストしたクラスにする

いい具合にトラブってしまったのでメモです。 クラスの定義にはいくつかの種類がありますが、あるクラスの内部にネストした(入れ子になった)クラスを定義することができます。このとき、修飾子として static をつけたネストしたクラスと、それがないネスト…

RxJava1 から RxJava2 へ移行する時に nullable な値とうまくつきあう

次のような RxJava1 のコードを RxJava2 に移行することを考えます。 import rx.Observable; // RxJava1 private Value nullableValue; public Observable<Value> observeValue() { return Observable.fromEmitter(emitter -> emitter.onNext(nullableValue)) .filt</value>…

自転車でめぐる SHIROBAKO の聖地

この記事は SHIROBAKO Advent Calendar 2017 の 17 日目の記事です。 adventar.org SHIROBAKO には木佐さんという自転車が趣味のアニメーターさんがいます。えくそだすっ!のときには、落合がカナンの人と話をしているところを目撃したり、8 カット上げたこ…

甘い口溶けのスタウトビールを飲みました

この記事はBeer Advent Calendar 2017の9日目の記事です。 adventar.org きっかけ なにがきっかけでチョコレートビールの存在を知ったのかは忘れてしまいましたが、その後たまたま見かけたアニメでも取り上げられていて、なるほどこれは良さそうと思いアドベ…

potatotips #45 で発表してきた

potatotips #45 にて WebView と題して発表してきました。 speakerdeck.com 概要 ChromeCustomTabs の登場で使い所が限られてきている WebView ですが、法的情報(プライバシーポリシーや規約など)の簡素な静的 HTML を表示するために手軽に使えるため、意外…

RTL かどうかを判定する

RTL(Right To Left; アラビア語などの右から左へテキスト等をレイアウトする必要のある環境)対応にはいくつかのステップがあります。 単にレイアウトの属性を RTL に対応したもの(gravity や margin、padding や RelativeLayout の各種属性を Left/Right で…

StateListDrawable の子にあたる Drawable の背景色を Animator で変えてみる

概要 Android Framework に数ある Drawable のなかでも、View の状態に応じて使う Drawable を切り替えることのできる StateListDrawable は多くの人が使っていると思います。ListView のアイテムの背景、ボタンの背景などインタラクションをする View に対…

懐かしいゲームがリメイクされていたのでテンションあがって遊んでみた

懐かしいゲームというのはこれのことです。 store.steampowered.com 内容は、60年代の米国とソ連が宇宙からきた未知の資源を巡って太陽系の惑星やら衛星でドンパチするという完全に硬派でシブいSFゲームですが、発売当時(98年)のPCでもモリモリ動く3Dのファ…

RecyclerView の item に focus が当たったことを検知する

やりたいこと 旧来の AdapterView (ListView や GridView など)でいうところの OnItemSelectedListener と同じように、RecyclerView がもつアイテムにフォーカスが当たったときにその情報をコールバックする方法です。 方法 RecyclerView には OnChildAttach…

ツールド東北

ツールド東北に同僚と参加してきました。 出場するのは日曜日の南三陸コース。前日に民泊のお家に到着して、そこから受付をしに自転車を組み立てました。 石巻の会場にはSubaru XV が!上には Bianchi の自転車が乗っかっていて、よさそう(小並感)と思いま…

嬬恋キャベツヒルクライムに参加してきた

今年からサイクリングイベントに参加し始めてはや3回目の大会となりました、群馬県嬬恋村の万座ハイウェイを自転車専用に貸し切って開催された嬬恋キャベツヒルクライムに参加してきました。 cabe-hill.net 距離は約20kmで1000mの標高差を登ります。平均勾配…

NuAns NEO Reloaded 使用感

Nexus5X から次の端末を探しているときに NuAns NEO Reloaded がリリースされたのを機に乗り換えて、2ヶ月ほどが経ったので使用感を書き残しておこうと思います。 概ね Vanilla Android なので、Nexus シリーズのリファレンス機に慣れていれば特に違和感なく…

SMS が相手に届いたかどうか判定する

SMS や MMS と言ったメッセージのやりとりの仕組みには、Delivery Report という機能があります。SMS をおくると、キャリアが Delivery Report を送り主に返します。この Delivery Report を見ることで、SMS が相手に届いたかどうかが分かります*1。 SMS や …

RxJava 1.x -> 2.x: Observable.OnSubscribe<T> から ObservableOnSubscribe<T> へ移行する

RxJava 1.x には Observable の static なインナークラスとして Observable.OnSubscribe がいました。Javadoc にあるとおり、Observable を subscribe したときに呼ばれるメソッドを定義するためのフックになるクラスです。 RxJava 2.x ではインナークラスで…

ビーナスライン

最近は毎日30度超えの真夏日で、自宅から日帰りで行って帰ってこれる場所では暑すぎて熱中症待ったなしだと思ったので、電車輪行の練習も兼ねて長野県茅野市から松本市に至るビーナスラインを走ってきました。 電車での移動距離もそこそこあるので、特急に乗…

<merge> タグをつかったレイアウトのプレビューを期待通りに表示する

Issue Fragment を使わず View をベースにしてレイアウトを組むと、Fragment と同じような役割をもった CustomView を作ってレイアウトを組みます。 このとき CustomView は何かしらの ViewGroup を継承することになりますが、そのレイアウトファイルのルー…

Kotlin でかいた interface を Retrofit に食わせたときのエラーに対処する

TL; DR Kotlin & @Body · Issue #1805 · square/retrofit · GitHub 問題 Retrofit で REST API のクライアント実装を生成する時、Kotlin で書いた interface を渡すとき、メソッドにジェネリクスを使った引数がいるとまれに次のようなエラーメッセージを吐き…

Robolectric 3.4 RC3 で dependencies の ArtifactId が変わります

Robolectric にはいくつかのサブプロジェクトがあり、それぞれに dependencies を追加する必要があります。Robolectric ではサブプロジェクト名が ArtifactId になっています。 そして 3.4 RC3 から ArtifactId が変更になったものがあります。主には、robol…

Wercker での Android アプリの CI を速くするポイント

CI の速さは開発のプロセスを高速化する上で重要です。Android アプリのビルドはどうしても時間のかかる部分が多く数分から十数分の時間を要してしまいますが、工夫次第では数十秒から数分の短縮が可能です。 プロジェクトの規模や構成にもよるので一概にす…

ツールド美ヶ原

先月たまたま申し込み期限ギリギリに申し込んだツールド美ヶ原に行ってきました。 激坂があり、それを乗り越えた先には雄大な自然!気持ちよさそう!!楽しそう!!!という勢いで申込んだわけですが、梅雨真っ盛りとあって天気は週間予報からあまり良くなく…

Again: AsyncLayoutInflater vs Litho #potatotips

前回 は実装が悪くて完全に Litho が負けていましたが、ある程度動かせるものができたので、potatotips で発表してきました。 speakerdeck.com 結論から言えば、これでもやはり AsyncLayoutInflater のほうが速いです。「Litho は既存の XML によるレイアウ…

Robolectric の依存を事前に解決してテストにかかる時間を短縮する

起こったこと Robolectric を使って JVM 上でテストを動かす場合、次のようなエラーログを目撃することが稀によくあります。 com.sample.SampleTest > sampleTestCase STANDARD_ERROR Downloading: org/robolectric/android-all/6.0.0_r1-robolectric-0/andr…

富士ヒルに参加してきた!

人生初の自転車イベントとして、富士ヒルクライムに参加してきました。普段から山を登りに行くのは好きなのと、完走者が多いということで、3月にシュッと申し込みをしていました。 知人が宿等のアテンドをしてくれたので、自分は移動手段と運転を担当しまし…

AsyncLayoutInflater vs Litho

先月の shibuya.apk で Litho の発表があり、非同期でレイアウトの展開(draw 以外の部分)をやってくれる機能をもっているということで、AsyncLayoutInflater と Litho で勝負したらどっちが速いかを確かめたくなったので、結果を書いておこうと思います。 …

android:windowBackground に指定する BitmapDrawable の位置を指定するときに気をつけること

Android アプリで SplashScreen を作る場合、android:windowBackground をつかうことでレイアウトを読み込まなくてもスプラッシュ用の画像を表示できます。レイアウトを待たなくてもよいので、アプリの起動直後からスプラッシュ画像が見えてよい、というのが…

Context#startActivity からすぐに Activity が起動しないパターン

前提条件 Service から次のように Activity を起動しようとした時、直近 5 秒以内に他の Activity を Home キーで閉じていると、startActivity の呼び出しからすぐには Activity が起動しません。 // this は Service Intent intent = new Intent(this, Some…

都民の森に登ってきた

今日も自転車でヒルクライムでした。今日は以前話をしていた人たちと都民の森へ! 昼に武蔵五日市駅にあつまって、そこから都民の森へ行って帰ってくる行程です。以前は武蔵五日市から檜原街道の途中の交差点を上野原にむかって登っていったことがあるのと、…

子の権現に登ってきた

本当は子の権現に行くつもりはなく、国道299号を秩父まで行って、そこから奥武蔵グリーンラインを走ってみようかなと思っていたのですが、途中で財布を忘れたことに気が付き、じゃあ子の権現に行ってそのまま帰ろうということで子の権現に行くことになったの…

potatotips #39 に行ってきた

技術書典2 では TechBooster から Colorful Android のコンテンツの一つとして DroidKaigi で発表した WindowManager の内容 + Android O の話を書き書きしましたが、その Android O の部分の抜粋 LT をしてきました。 speakerdeck.com 「Android O Preview …