2013年8月4日日曜日

Androidの便利なカラーピッカーライブラリをマージして公開

Xposedでステータスバーの背景色を変更する際、Preferenceで使える便利な
カラーピッカーライブラリを見つけたので紹介したい。大元はmargaritovさんという
方が作成した物がオリジナルのようだが、色々な方が改変して使っているようだ。

例えば下記はXposedフレームワーク作者のrovo89さんの改変バージョンが
githubで公開されている。これはオリジナルに色設定の有効/無効を切り替える
チェックボックスが追加されている。

■ rovo89/android-ColorPickerPreference
https://github.com/rovo89/android-ColorPickerPreference

他にはattenzioneさんという方のバージョンもある。これはオリジナルに
色(ARGB)のHEX文字列情報を表示するテキストボックスが追加されている。

■ attenzione/android-ColorPickerPreference
https://github.com/attenzione/android-ColorPickerPreference

せっかくの便利な物がバラバラになっていて面倒だったので、両者をマージした
プロジェクトファイルを以下に公開してみた。
https://drive.google.com/open?id=0B3bjmX6Y3dO5NWMtTWhSdVJ6ZW8

【動作画面】
Preferenceの設定画面(左)およびカラーピッカーのダイアログ画面(右)は
それぞれ以下のように表示される。


【ライブラリの使い方】
(1)下記のソースファイルをコピペしてプロジェクトに追加する。
 src/net/margaritov/preference/colorpicker/AlphaPatternDrawable.java
 src/net/margaritov/preference/colorpicker/ColorPickerDialog.java
 src/net/margaritov/preference/colorpicker/ColorPickerPanelView.java
 src/net/margaritov/preference/colorpicker/ColorPickerPreference.java
 src/net/margaritov/preference/colorpicker/ColorPickerView.java

(2)下記のレイアウトファイルをコピペしてプロジェクトに追加する。
 res/layout/dialog_color_picker.xml
 res/layout-land/dialog_color_picker.xml

(3)Preferenceの設定ファイルを作成する。例えば下記のように記述する。


    
        android:key="key_test_color"
        android:title="@string/title_test_color"
        android:defaultValue="@integer/COLOR_BLACK"
        showCheckbox="true"
        enabledByDefault="true"
        hexValue="true"
        alphaSlider="true"
    



オリジナルの改変機能は下記4項目となっていて、それぞれtrue/falseで設定する。
・showCheckbox : 有効/無効のチェックボックスの表示
・enabledByDefault : チェックボックスのデフォルトの有効/無効
・hexValue : 色(ARGB)のHEX文字列の表示
・alphaSlider : 透過度を示すスライダーの表示

(4)Preferenceの値の取得処理は例えば以下のように記述する。
<ColorPickerPreferenceのキー値>+"_enabled"を指定するとチェックボックスのON/OFFが
取得できるので、有効だった場合はColorPickerPreferenceのキー値を指定して色(ARGB)の
値を取得する。
SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean isChecked = preference.getBoolean("key_test_color_enabled", true);

if(isChecked){
    int color = preference.getInt("key_test_color", Color.BLACK);

    // 以下color(ARGB)を使った何らかの処理
}

以上で簡単にカラーピッカーを組み込んで使う事が出来る。
おそらく他にも使いやすいカラーピッカーやファイルエクスプローラのような
ライブラリが埋もれていると思うので、暇な時に探してみるといいかも。

3 件のコメント:

  1. はじめまして
    色選択のダイアログを探していたので、とても助かりました
    ありがとうございます

    会社のシステムで、公開しているソースを参考にしようと思うのですが
    問題ないでしょうか?

    ライセンスの記述を見つけられなかったのでコメントさせてもらいました

    返信削除
    返信
    1. ZIPアーカイブに元のLICENSEファイルが抜けていたので同梱し直しました。ライセンスはApache License 2.0で、元のライセンス所有者に帰属します。私自信の追加ライセンスは無いので、LICENSEファイルを流用した上でご自由にお使いください。

      このライブラリで後から気づいた注意点として、
      ・launchModeをstandardに設定してダイアログ表示したまま回転させるとWindowLeakします。
      ・launchModeをsingleTask or singleInstance、configChangesをorientationに設定してダイアログ表示したまま回転させると色選択ボタンやラベルが表示されなくなります。(回転を戻すと表示されます。)

      githubのライブラリ作成元にIssueを投げましたがもはやメンテナンス放棄してるようで、上記問題は自分で修正する必要があります。

      削除
    2. 早速の返信ありがとうございます

      また、LICENSEファイルの追加ありがとうございます

      指摘内容を修正した上で使用したいと思います

      削除