fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

Android

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

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

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…

Custom ViewがRecyclerViewの何番目にあるかをEspressoでさがす

この記事はEspresso 2.2.2時点のもの。 ポイントは次の二つ。 Espresso.onView()にcustom viewのクラスを探すcustom matcherを渡す BoundedMatcherの型引数にcustom viewのクラスを渡してやると便利 TreeIterables.breadthFirstViewTraversal(View)でcustom …

AndroidのIntent.ACTION_DATE_CHANGEDを受け取れない人へ

次のStack Overflowのやりとりが答えの全て。 stackoverflow.com Intent.ACTION_DATE_CHANGEDはリファレンスによると日付が変わった時(つまり毎日0時0分)に飛んでくるブロードキャストインテントらしいのだが、時刻を求める処理にバグがあって、夜中ではな…

AndroidPuzzlers) RecyclerViewとFloatingActionButtonを共存させるには

次のレイアウトファイルをActivityでsetContentView()に渡すとどうなるでしょうか。 <LinearLayout android:id="@+id/linear_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </linearlayout>

RecyclerViewのデータとビューを更新するnotify系メソッド

ユーザストリームに対応したAndroidのツイッタークライアントを作っている。 ユーザストリームを表示するためにRecyclerViewを使っているのだが、Twitter4JのTwitterStreamにセットしたリスナでStatusを受け、RecyclerView.AdapterにStatusを渡した後、デー…

AndroidAnnotationsをプロジェクトで使うためのGradleメモ

このページにかいてあること。自分用のメモ。 excilys/androidannotationsgithub.com APTを使えるようにするために、トップレベルのbuild.gradleに追記 buildscript { dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } } 素のa…

go.mobileアプリのビルド環境をfreshなubuntu14.04の上につくる

go.mobileアプリのビルド環境はDockerイメージで配布されている。 Windows 7(64bit)でVirtualboxにUbuntuを入れてビルド環境を作った。その手順をメモっておく。 ホストOS上で仮想マシンを作る ホストOS(Win7)上でhttp://vagrantbox.esからdocker readyなbox…

Xperia Z1のSensorEventのタイムスタンプがナノ秒単位のUNIXタイムだった件

以前、SensorEventのtimestampについてのメモ - fresh digitableで、SensorEventのタイムスタンプはシステム起動からのナノ秒単位の時間なので何時何分におきたイベントか知りたいときは一工夫必要だというようなことを書いた。しかし、Xperia Z1(Android 4.…

byte[]からdouble[]への変換でByteBufferを使う

昔とった私のHRTF(Head-Related Transfer Function)のインパルス応答(以降, hrir: head-related impulse response)を音楽に畳み込みながら再生するアプリを作り始めた。 hrirはdoubleのバイナリ形式で保存してあったので、ファイルからbyte[]形式で読み込ん…

Androidのtimestampについて勉強したこと

SensorEventのtimestampについてのメモの続きっぽいもの。いわゆるRTCとセンサとかGPSのタイムスタンプはそれぞれ違うものだという話。このへんはLinuxの基本的なことだと思うがよくわかってなかったし、今もいまいちよくわかっていないので、間違ってたら教…

SensorManager#registerListener()で値の取得間隔を設定した時の実際の間隔

前回の記事の続き。 各センサの値の取得間隔を設定した時、実際にはどんな間隔でもらえるのか検証してみた。 前回と同じく、検証にはIS12Sを使った。 下記のスレッドをActivityのonCreate()でスタートさせてLogcatに出てくるヒストグラムを見る。 取得間隔は…

SensorManager#registerListener()で値の取得間隔を設定できるらしいが…

この季節は部屋が大変暑くなるので私にもPCにもよろしくないです。ドヤリング的なことをしようにも今ひとつ踏み切れない感じです。去年、涼しい所で作業するためにアs、エイスースのウルトラブックを買ったので今年こそは活用したいです。 さて本題。 最近A…

SensorEventのtimestampについてのメモ

AndroidのSensorEventクラスのtimestampはシステムがスタートしてからの時間(ナノ秒)なので、1970/1/1からの相対時間(ミリ秒)だとおもってSimpleDateFormat#format()とかに突っ込むとものすごい勢いで時間が進んでいくから注意しよう。お兄さんとの約束だ。 …

VolleyでDigest認証をやってみる

この頃やっと仕事でプログラミングやるようになったので折角だしTDDでやってみるかと思ったらEclipseにActivityのコードを自動生成されて出鼻をくじかれました。 そんなことはどうでもよくて、今日はHTTPライブラリVolleyでDigest認証を実装してみたという話…