読者です 読者をやめる 読者になる 読者になる

メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

ReachabilityをAndroidで実現するライブラリを作った

Reachabilityとは?

  • iPhone 6 & 6 PLUSで導入される仕組みです。デモ動画を見たときに便利だなーと思うと同時に、Androidでも似たようなことができるんじゃないかと思いました。

Reachability on Android

作りました。Reachability

Activityに、以下のように追加することでReachabilityが実現可能になります。

Reachability reachability = new Reachability(this);
reachability.makeHoverView(Reachability.Position.RIGHT);

忘れずにbuild.gradleにも追加してください。

compile 'com.github.sakebook:Reachability:0.0.1@aar'

詳しい使い方はREADMEに書いてある通りなのですが、いくつか説明をします。

HoverView

丸い、画面下部に浮かんでいるようなボタンです。 Google+に似たようなボタンがあったので、それを参考にして作っています。
ピクトグラムは試行錯誤した結果、画面をはみ出すようなデザインにしました。 外側の矢印で動きがあることを示し、中にあるドットが到達点で動きを表現しています。色合いはMaterialDesignのカラーパレットを参考にしました。

ステータスバーの表示

ステータスバーも届かないので、こちらも呼び出せるようにしました。
android-17(Android 4.2, 4.2.2)から、expandメソッドでは開けないようになりました。開く場合は、expandSettingsPanelexpandNotificationsPanelを用途に応じて呼び出し分けなければなりません。
Reachabilityでは、expandNotificationsPanelのみサポートしています。

RootViewに対してTouchListenerを実装すると、すべての箇所で反応してしまいます。
RootViewの一つ上に乗っかっているContentViewのTouchListenerの返り値をtrueにすることで、ContentViewがある部分ではRootViewが反応しないように制御しています。

カスタムアニメーションについて

シンプルなアニメーションなら対応していますが、複数時間差で動かすアニメーションや、HoverViewを画面の好きな場所に配置することなどはまだサポートできていません。 カスタムアニメーションの部分は課題が多いです。

今後

テーマによる配色変更や、アニメーションの詳細設定、HoverViewの拡張などを考えています。 PullRequestやご意見お待ちしております。

参考

大きくなったiPhoneの新機能、片手モード「Reachability」の動画 / GIZMODO

Material Design Preview : Color

[Android アプリの UI デザイン] Layer List の作りかたのまとめと Tips / クラスメソッドブログ

Activityのビュー階層とコンテンツルート(View)を取得する / Kazzzの日記

コードからステータスバーを開く / Y.A.M の 雑記帳

Android のタッチイベントを理解する(その1) / Unmotivated やる気はない

AndroidでもiPhoneに負けないようなアニメーションを実装してみよう / YAHOO!JAPAN デベロッパーネットワーク