fresh digitable

セミコロンたちが躍動する おいらのコードを 皆さんに 見せたいね

asciidocで書いたドキュメントをgradleでpdfにビルドする設定

adocで書いていたドキュメントをgradleでpdfにビルドできるように色々やりました。今回のミソはjrubyのgradle pluginを使うとgemを使えるようになるということです。 asciidoctorのプラグインと依存関係のgemを使えるようにするために、次のプラグインをプロ…

oboeのコードラボをやった時のメモ

かねてより気になっていたoboeのコードラボをやってみた。とりあえず最後まで流してみたという程度で、詳しい動きは追えていない。そこまでのメモということで何卒ご容赦を。 Build a Musical Game using Oboe IllegalStateException: Failed to find Build …

clearという名前のメソッドをもつViewModelのサブクラスをdalvikvm上で見つけられない人へ

年末、android-ktxをプロジェクトに入れようとして思わぬところで躓いたのでメモしておく。現象としては、Android 5.0以上が動いているエミュレータでは問題ないのに、4.4のエミュレータではアプリが起動するときにクラッシュしてしまうというもので、LogCat…

2018年に見たアニメ

毎年恒例のやつを今年もやります。タイトルの並び順は50音順です。カッコ[ ]つきのものは録画したけどまだ見てないというやつです。必ず見るのでいつかは外れると思います。 冬クール ヴァイオレット・エヴァーガーデンとよりもいを見て毎週泣くおじさんと化…

RobolectricでRecyclerView.smoothScrollToPosition()を呼ぶとテストが進まなくなる(未解決)

ViewPagerの代わりにRecyclerViewを使ってチュートリアルの紙芝居を実装したのだが、進むボタンをN回押してサインアップへ進む画面に行くテストがいつまで経っても終了しない現象が起きた。諸事情によりprintデバッグを使って二分探索的にどこで止まっている…

AndroidのLiveDataとかViewModelについて考えるとりとめのないこと

LiveDataはデータホルダなので、覚えておきたいことを覚えておくために使うのがよい。表示したいデータとか、画面の状態など。私は、イベントやメッセージは受けた人が覚えておくべきものではないと考えているので、イベントバスやメッセージパッシングのた…

TestRuleでテスト対象の初期化処理などをまとめる

テストケースのセットアップ処理を使いまわしたい時、TestRuleに実装するといろんな使いまわしが効いて便利なので最近はそうしている。個人的には、TestRuleの中には本当に基本的な準備や後始末の処理を書いて隠し、テストクラスの方に本質的なテストの前提…

JUnit4のEnclosedなクラスのテストが2回実行されてしまう件のイージーな回避方法

./gradlew testUnitTest --tests *Test ちゃんとぐぐれば重複したクラスを除外するコードが出てくるので普通の人はそっちを試したほうがいいと思います。 2018/10/26 追記 Gradle4.7でこの現象が起きなくなったようです。

今どんな感じでアプリ開発を進めているかまとめてみる

仕事でAndroidアプリ開発をやって行く中で、自分のスタイルができつつあるので整理してみる。今作っているアプリによるところが大きいと思うので別のケースに対応できるかどうかはわからない。いろいろありそうなのでいくつかに分けてまとめることにする。続…

RobolectricでDialogのOKとかCancelとかのボタンを押す

AlartDialogに付いてるOKとかCancelみたいなデフォルトのボタンを押したくなったので調べた。 dialog.findViewById(android.R.id.button1).performClick() positive: android.R.id.button1 negative: android.R.id.button2 neutral: android.R.id.button3 :t…

実行環境でうまく表示できないVectorDrawableについてのメモ

レイアウトエディタのプレビューだと何ともないのに実行環境だと表示が崩れてしまうVectorDrawableのファイルがあったので状況整理のためにメモしておく。 もとのSVGはデザイナさんが作成したものを受け取ったあとSvgToVectorDrawableConverterというツール…

2017年に見たアニメ

毎年恒例になりつつあるアニメの振り返りを今年もやる。基本的に五十音順だが、もしそうなっていないところがあったとしたらそれは私のミスです。また、括弧つきのタイトルは録画してあるけどまだ見てないというやつです。再放送のやつもいくつか見た気がす…

マテリアルデザインぽいアイコンをinkscapeで作った

アプリを出すにあたってアイコンを作る必要があったのでinkscape(ver. 0.92.2)でマテリアルデザインっぽいアイコンを作ってみることにした。参考にした動画: “How to create a material design icon in Inkscape - MaterialUp” https://t.co/ipIjKVTX23— 壁…

Twitterクライアント`aoeliyakei`のベータ版をリリースした

自分で使うために1年半ほどずっと作っていたTwitterクライアントのβ版をplayアプリストアでオープンベータ版として公開した。FABをフリックしてRTとかlikeとかを行うクレイジーな操作感のアプリである。リポジトリ名はUdonRoadだがアプリとしてリリースする…

ViewPagerの中に入れたImageViewで拡大縮小やスクロールをするためにやったこと

UdonRoadではツイートに添付されている画像を表示させるため、ViewPagerの中にImageViewを入れて使っている。これまでは特に何も考えず表示させていたが、パノラマっぽい横長の画像やマンガの中の小さな文字などを詳しく見るために画像を拡大できるようにし…

ExoPlayerのAudioProcessorを実装する

頭外音像定位のデモためのAndroidアプリを作っている。 github.com akihito104.hatenablog.com 音に独自の効果を加えたいときはAudioProcessorを実装する。AudioProcessorは前段の処理で展開された音データをPCM形式で受け取り、これを変換して返す。返した…

ExoPlayerのAudioProcessorで頭外音像定位するオーディオプレイヤーを作っている

Androidのメディア再生のためのライブラリであるExoPlayerには、PCMになった音データを受け取って処理できるようにするAudioProcessorというインタフェースがある。これを実装したクラスのインスタンスを、プレーヤーインスタンスを作る時にいい感じに渡して…

VideoViewとその周辺のコードを読んだり調査した #m_android_fcr

今作っているツイッタークライアントが、N(Android 7.0)になった辺りからContextをリークさせるようになってしまったのでいろいろと調査した。 コードーディング会にもお邪魔して集中して取り組んだ。主催者の@operandoOSさん、会場を提供してくださったメル…

ViewAnimationUtils.createCircularReveal()にはアニメーションさせたいviewの左上を基準にした座標を渡す

ViewAnimationUtils.createCircularReveal()はcircular reveal animatorのオブジェクトを作成するためのユーティリティクラスで、 API Level 21(Lollipop)で追加された。 ViewAnimationUtils | Android Developers アニメーションさせたいviewと、円の中心座…

2016年に見たアニメ

去年も書いたので今年の分も書いて振り返る。読みが五十音順になるよう並べていますが、そうなっていないところがもしあればそれは間違いです。 冬クール アクティヴレイドとか昭和元禄落語心中は放送が終わった頃にようやく録画したやつを一気に見たけど素…

ImageSpanを使って画像をTextViewの中にいい感じに表示する

(これはAPI Level 25(Android 7.1.1)のNexus5XおよびAPI Level 23(Android6.0)のNexus5(エミュレータ)で確認した) TextViewはsetCompoundDrawables(Drawable, Drawable, Drawable, Drawable)を使うと文字領域の上下左右に一つずつDrawableを置くことができ…

Html.fromHtml()はカジュアルに使うものではない?

拙作のツイッタークライアントが、起動して3時間ほど放置しておくと全く動かなくなってしまうようになった。どこか触るとANRが出て落とせるので、その都度traces.txtを見ると、いつもHtml.fromHtml()を呼んでるところで止まっている様子。 内部ではパーサー…

FragmentManager is already executing transactionsと言われた時、Fragmentの初期処理で例外が起きていないか確認する

(この現象はAndroid6.0, support-lib ver.24.2.1で確認した。) 次のような例外が出た。メッセージを読むと「トランザクションをすでに実行しているところだ」と言われているようなので、commit()するタイミングが悪かったのかななどを考えていろいろ試して…

Twitter cardとOpen graphのデータを取ってくる

Twitterカードのデータは個々のwebページのmetaタグなので、ページをフェッチしてhtmlを解析すればよい。AndroidではXmlPullParserを使えばお手軽にhtmlを解析できる。 dev.twitter.com developer.android.com ちなみに、上のサイトには KXmlParser via XmlP…

RecyclerViewの中の要素をshared elementsにしてアニメーションする

今作っているツイッタークライアントは、タイムラインのユーザアイコンがタップされたらユーザ情報Activityに遷移するのだが、そのときにタップされたユーザアイコンが移動してユーザ情報Activityのユーザアイコンに重なるアニメーションを実装した。現時点…

ViewPagerで表示するviewのclickがひろえないなと思ったら

Twitter公式クライアントの画像プレビューに限りなく近いものを作りたくて、ViewPagerにわたすFragmentの中でImageViewを作って、OnClickListenerをセットしてクリックイベントをとろうと思って次のように書いたのだが、だめだった。 @Override public View …

SYSTEM_UI_FLAG_IMMERSIVEとSYSTEM_UI_FLAG_IMMERSIVE_STICKYとの違い

API Level 19からは全画面表示をしたいときにどっちかのフラグをセット(View.setSystemUiVisibility())することで没入感をより高めることができる。 SYSTEM_UI_FLAG_HIDE_NAVIGATIONとSYSTEM_UI_FLAG_FULLSCREENとを合わせてセットすることで、システムUIが…

カスタムビューに独自のスタイル属性を定義する

メディアのサムネイルを同じ大きさで横一列に並べるコンテナクラスを作ったので、中にいれるサムネイルの数をレイアウトリソースで定義できるようにした。 res/values/attr.xmlにdeclare-styleableを追加する <resources> <declare-styleable name="MyCustomView"> <attr name="thumbCount" format="integer" /> </declare-styleable> </resources> layoutリソースファイルで次のように使う

TextViewをextendsする

Viewを継承して自分のカスタムビューを作ろうとする時、3種類のコンストラクタをオーバーライドしなければならない。今までは何も考えずに public HogeView(Context context) { this(context, null); } public HogeView(Context context, AttributeSet attr…

FloatingActionButtonのBackgroundTintにselectorを使うには

FloatingActionButtonにsetEnabled(false)とかいう邪道なことをしようとしていて、状態に合わせて色を変えたかったのでcolorリソースのselectorを次のような感じで指定しようとした。 ColorStateList colorList = ContextCompat.getColorStateList(getContex…