【AndroidのDrawableリソースでいろいろする】 Level List/LevelListDrawable

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

LevelListDrawableの使い方を説明します。
LevelListDrawableは「画像」と「範囲」の組をリスト化し設定した値が含まれる「範囲」の「画像」を表示します。
使いどころは、特定の条件によって画像を切り替える必要がある場合です。
例は「キャラクターのレベルによって画像を変えたい」や「状態によってい画像を変えたい」などなど.
上記の例ではImageView#setImageResourceで設定をすることもできますが、Javaコード内にif文が大量に記述されるため可読性が低下します。
xmlで設定する属性は下記の3つです。

  • drawable:表示する画像
  • maxLevel:上限レベル
  • minLevel:下限レベル
今回はサンプルとして下記の仕様を持ったコードを作成しました。
  • LevelListDrawableを使って表示する。
  • Seekbarのつまみを移動させ、位置によって画像を変更する。
  • Seekbarのprogressは0~99に設定
  • 画像は5枚あり、progressの値を0~19/20~39/40~59/60~79/80~99の5個の範囲で分ける。
  • 現在のprogressを表示する。
<?xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@android:drawable/ic_dialog_alert"
        android:maxLevel="19"
        android:minLevel="0" />

    <item
        android:drawable="@android:drawable/ic_dialog_dialer"
        android:maxLevel="39"
        android:minLevel="20" />

    <item
        android:drawable="@android:drawable/ic_dialog_email"
        android:maxLevel="59"
        android:minLevel="40" />

    <item
        android:drawable="@android:drawable/ic_dialog_info"
        android:maxLevel="79"
        android:minLevel="60" />

    <item
        android:drawable="@android:drawable/ic_dialog_map"
        android:maxLevel="99"
        android:minLevel="80" />
</level-list>
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        linearLayout.setBackgroundColor(Color.BLACK);
        linearLayout.setGravity(Gravity.CENTER_HORIZONTAL);
        //SeekBarを使ってLevelListDrawableのLevelを変更する。
        SeekBar seekBar = new SeekBar(this);
        seekBar.setMax(100);
        //LevelListDrawableを表示するImageView
        final ImageView imageView = new ImageView(this);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(500,500));
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        //LevelListDrawableを設定する
        imageView.setImageResource(R.drawable.level_list);
        //現在のLevelを表示するTextView
        final TextView nowLevel = new TextView(this);
        nowLevel.setTextColor(Color.RED);
        nowLevel.setTextSize(30);
        nowLevel.setText("level:0");
        linearLayout.addView(imageView);
        linearLayout.addView(seekBar);
        linearLayout.addView(nowLevel);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                //SeekBarのprogressをそのままLevelListDrawableのLevelに設定する。
                LevelListDrawable drawable = (LevelListDrawable) imageView.getDrawable();
                drawable.setLevel(progress);
                //現在のLevelを表示する。
                nowLevel.setText("Level:" + progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
        });
        setContentView(linearLayout);
    }
}

Androidゲームプログラミング A to Z

新品価格
¥4,968から
(2017/2/27 22:58時点)


AndroidエンジニアのためのモダンJava

新品価格
¥3,456から
(2017/2/27 23:01時点)


AndroidNDKネイティブプログラミング第2版

中古価格
¥1,893から
(2017/2/28 00:04時点)


Androidアプリ開発逆引きレシピ (PROGRAMMER’S RECiPE)

新品価格
¥3,024から
(2017/2/28 00:06時点)


Android Studio ではじめる Android プログラミング入門 第3版 Android Studio 2対応

新品価格
¥3,240から
(2017/2/28 00:11時点)


アプリを作ろう! Android入門 Android Studio版 Android5対応

新品価格
¥2,160から
(2017/2/28 00:31時点)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)