tarotaroのエンジニア生活

技術ネタとか日々の仕事の話とか

Androidで、iPhoneのUIDatePickerみたいな日付インターフェースが欲しい

Androidの日付取得ダイアログのDatePickerDialogは、かっこわるいし、使いづらいったらありゃしないと思う。iPhoneのUIDatePickerダイアログは使いやすいし、見た目もかっこ良いと思う、iPhoneAndroidの両方の開発をしている方がいたら、Androidでも使えたらなと思うことがあると思う。
ちなみに、Androidの日付ダイアログは下のような感じ。
datepicker
みてもらってもわかるように、フリックでスクロールとかできないので、最初に設定した日付から遠い日付とか選びにくい。iPhoneはというとこんな感じ
979328
そこで、Android用のiPhoneみたいなピッカーのUIが使えるソースがあります。それが、githubからダウンロードできます、ライセンス的には、Apacheライセンスみたいです。
https://github.com/sys1yagi/AndroidPractice/tree/master/DrumPicker/trunk
ここからです、ちなみに、このピッカーを使うと、以下のようになります。
device-2011-10-09-033421
ちなみに、ここのソースには、そのままだとちょっと問題があるため、直す方法を残しておきます。
まず、導入方法ですが、SDKのminVersionは、4から使えるので、自分のプロジェクトの設定をしておき、コンパイルするAPIの対応バージョンを2.3以上にしておきます。そうしないと、コンパイルができないです。(あるソースを抜かすとできるのですが、そうすると2.3以上で動かなくなってしまいます。)
問題がある部分は、DateDrumPicker.javaで、
setMonthメソッドの

setPosition(1, MONTH.length -1 - month);
の部分を

setPosition(1, MONTH.length  - month);
にします。これで、日付をCalendarのmonthに1を足した値で設定できるようになります(これをやらないと、10月は値を9として設定することになります。)
また、
setDayメソッドの


setPosition(2, days -1 - day);

の部分も


setPosition(2, days - day);

に直します。これによって、設定する日付が1日ずれるのを直せます。 
あとinitメソッドの


setPosition(2, day - oldd);

の部分を


setPosition(2, day - oldd-1);

に直します、
あと、initメソッドの


// リスナー
と書いてあるリスナーを設定してあるところの前に

mYear=oldy;

mMonth=oldm;

mDay=oldd;

を追加します。
これでOKです。こうすることによって、普通に表示すると、最初の日付が現在の日付になります。
ほか種類のDrumPickerを作りたければ、TimeDrumPickerを参考にするといいと思います、そっちの方がシンプルにできてるようなので、