2011年4月27日水曜日

【Android】 cancelableがfalseなDialogをタイムアウトでcancelするスニペット

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ほぼ、そういう機会は無いだろうなーと思いますが、
ProgressDialogなどをshowした後、一定時間経ったらタイムアウトさせてcancelさせたい場合があるかもしれません。
さらにダイアログはcancelableがfalseで、ユーザからキャンセルは出来ない様にしたいとか。
そういうまぁなかなか無い事をしたい時に使えるスニペットです。

モノ


以下のクラスをどっかに作ります。


public class DialogTimeout{
 public void setTimeout(final Dialog dialog, long timeout){
  new Handler().postDelayed(new Runnable() {
   @Override
   public void run() {
    if(dialog.isShowing()){
     dialog.cancel();
    }
   }
  }, timeout);
 }
}

あとはsetTimeoutでDialogとタイムアウトの時間を指定すると、指定時間経過後にcancelが実行され、
onCancelListenerのonCancelが呼ばれます。
cancelを呼ぶ際は、isShowing()でダイアログがまだ有効か確認しています。

使い方


まぁ普通にshowとかした後タイムアウトの時間指定して突っ込むだけ。

ProgressDialog dialog = new ProgressDialog(this);
        dialog.setIndeterminate(true);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setCancelable(false);
     dialog.setTitle("ダイアログ");
        dialog.setMessage("処理中だよー");
        dialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
             Toast.makeText(getBaseContext(), "タイムアウトしたっぽい", Toast.LENGTH_SHORT).show();
                finish();
            }
        });
        dialog.show();
        DialogTimeout.setTimeout(dialog, 5000);

まとめ


タイトルがルー大柴な気がする。

2011年4月26日火曜日

【Android】 ドラムピッカーを作りました。

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
作りました。
とりあえずDatePickerとTimePickerです。
まだサイズとか決め打ちっぽいのでレイアウト的に微妙です。
レイアウトxmlで適当に配置するとたまに死にます。
見た感じは↓



仕組み


DrumPickerというクラスをつくって、そこに任意の文字列コレクションと幅を指定すると列を一個作るみたいな感じになっています。
内部的にはScrollViewとLinearLayoutを組み合わせてドラム部分を作っています。
影はShade,レンズ部分はアルファ値を適当に指定して色を重ねあわせてる感じです。

例えばTimePickerは24時間,60分の文字列を突っ込んで、リスナーとかで時間の変更を貰っていろいろあれしています。
TimePickerは60行くらいで出来たので、まぁまぁ拡張性があるのか、何なのか。DatePickerの方は泥沼で195行。やっぱダメだ。
表示周りはリソースを使わず全てコード上でやっているので、jar形式かなんかで配布可能です。

今後


GitHubでソースを公開してます。まだ実用性は薄いかもなぁと。
https://github.com/sys1yagi/AndroidPractice/tree/master/DrumPicker/trunk

サンプル

サンプル実装をAndroid Marketに公開しました。
使い心地とかバグとか感想いただけるとありがたいです。
https://market.android.com/details?id=jp.dip.sys1.android.drumpicker&feature=search_result