Android の 13 個の Drawable のまとめ パート 3


このセクションの紹介:

このセクションでは、残りの 4 つの Drawable について学びます: LayerDrawableTransitionDrawableLevelListDrawable および StateListDrawable、 まだ 13 種類の Drawable マップを投稿しています:

1.png


1.LayerDrawable

Drawable 配列を含むレイヤー グラフィックス オブジェクト、および配列、インデックスに対応する順序でそれらを描画します。 最大の値を持つ Drawable が最上層に描画されます。これらの Drawable には交差または重なり合う領域がありますが、 これらは異なるレイヤーに配置されているため、<layer-list> をルート ノードとして使用すると、相互に影響を与えることはありません。

関連する属性は次のとおりです:

  • drawable: 参照されたビットマップリソース。空の場合、Xu Yan には Drawable タイプの子ノードがあります。
  • left: の左マージンコンテナーを基準としたレイヤー
  • right: コンテナーを基準としたレイヤーの右マージン
  • top: コンテナーを基準としたレイヤーの上マージン
  • bottom: コンテナーを基準としたレイヤーの下マージンコンテナへの
  • id: レイヤーの ID

使用例:

レンダリングの実行:

2.gif

コードの実装:

、と組み合わせる先ほど学習したshapeDrawableとClipDrawable:

layerList_one.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape android:shape="rectangle">
            <solid android:color="#C2C2C1" />
            <corners android:radius="50dp" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="#BCDA73" />
                <corners android:radius="50dp" />
            </shape>
        </clip>
    </item>
</layer-list>

次に、レイアウトファイルに次の内容のシークバーを追加します:

<SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
        android:indeterminateOnly="false"
        android:maxHeight="10dp"
        android:minHeight="5dp"
        android:progressDrawable="@drawable/layerlist_one"
        android:thumb="@drawable/shape_slider" />

なんと、なくなってしまったのですか?はい、それだけです~ レイヤーグラフィックスオブジェクトと言えば、画像をカスケードする効果も得られます :

レンダリングの実行 :

3.png

実装コード :

画像の積み重ね:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_bg_ciwei" />
    </item>
    <item
        android:left="25dp"
        android:top="25dp">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_bg_ciwei" />
    </item>
    <item
        android:left="50dp"
        android:top="50dp">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_bg_ciwei" />
    </item>
</layer-list>

次に、Activity_main.xml に ImageView を追加します。内容は次のとおりです:

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/layerlist_two"/>

シンプルで使いやすい、何を待っていますか。すぐにプロジェクトに適用してください~4.jpg


2.TransitionDrawable

LayerDrawable のサブクラスである TransitionDrawable は、Drawable の 2 つのレイヤーのみを管理します。 2つのフロア! 2つのフロア! また、透明度変更アニメーションも提供します。これにより、Drawable の 1 つのレイヤーが Drawable の別のレイヤーに遷移するアニメーション効果を制御できます。 ルート ノードは <

transition> です。これ以上のプロパティは LayerDrawable に似ていることに注意してください。 2 つのレイヤー間の切り替えアニメーションを開始するには、startTransition メソッドを呼び出す必要があります。 reverseTransition() メソッドを呼び出して逆方向に再生することもできます。

使用例:

レンダリングを実行します:

5.gif

実装コード:

res/drawableにTransitionDrawable xmlファイルを作成します

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@mipmap/ic_bg_meizi1"/>
    <item android:drawable="@mipmap/ic_bg_meizi2"/>
</transition>

次に、ImageViewをレイアウトファイル、そしてadd src 上記のドローアブルに設定します MainActivity.java の内容は次のようになります:

public class MainActivity extends AppCompatActivity {
    private ImageView img_show;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        TransitionDrawable td = (TransitionDrawable) img_show.getDrawable();
        td.startTransition(3000);
        //你可以可以反过来播放,使用reverseTransition即可~
        //td.reverseTransition(3000);
    }
}

さらに、複数の画像をループインおよびアウトする効果を実現したい場合は、 参照できます: Android Drawable Resource Learning (7)、TransitionDrawable の例 中心となる原理は非常に簡単です。ハンドラーはトランジション内の 2 つの画像を定期的に変更します。


3.LevelListDrawable

は、Drawableのグループを管理するために使用され、内部のDrawableに異なるレベルを設定できます。 描画するとき、レベル属性値に基づいて対応するドローアブルを取得し、それをキャンバス上に描画します。 対象: <level-list> 設定できるプロパティはありません。できることは、各 <item> を設定することだけです。 プロパティ!設定できる

item属性は次のとおりです:

  • drawable: 参照されるビットマップリソース、空の場合、Xu WeiにはDrawableタイプの子ノードがあります
  • minlevel: 対応する最小値levelの値
  • maxlevel: level対応する最大値

使用例:

レンダリングの実行:

6.gif

コード実装:

ShapeDrawable を通して円を描く、1 つ式の 5 つの部分を変更します。幅と高さを下げるだけです:

shape_cir1.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#2C96ED"/>
    <size android:height="20dp" android:width="20dp"/>
</shape>

次に、LevelListDrawable に移動します。ここで 5 つのレイヤーを設定します:

level_cir.xml:

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/shape_cir1" android:maxLevel="2000"/>
    <item android:drawable="@drawable/shape_cir2" android:maxLevel="4000"/>
    <item android:drawable="@drawable/shape_cir3" android:maxLevel="6000"/>
    <item android:drawable="@drawable/shape_cir4" android:maxLevel="8000"/>
    <item android:drawable="@drawable/shape_cir5" android:maxLevel="10000"/>
</level-list>

最後に、次のように記述します。 MainActivity のコード:

public class MainActivity extends AppCompatActivity {

    private ImageView img_show;

    private LevelListDrawable ld;
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                if (ld.getLevel() > 10000) ld.setLevel(0);
                img_show.setImageLevel(ld.getLevel() + 2000);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        ld = (LevelListDrawable) img_show.getDrawable();
        img_show.setImageLevel(0);
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(0x123);
            }
        }, 0, 100);
    }
}

これも非常に単純で、Timer タイマーです。ハンドラーはレベル値を変更します~


4.StateListDrawable

さて、ついに最後のドローアブルができました: StateListDrawable、この名前はパターンのように見えます、しかし実際には私たちは 以前に使用したことがありますが、ボタン<

selctor>にさまざまな状態のドローアブルを設定したことを覚えていますか?そうです、中古です それがこのStateListDrawableです!

設定できるプロパティは以下の通りです:

  • drawable: 参照されたDrawableビットマップ。コンポーネントの通常の状態を示すために前面に置くことができます~
  • state_focused: フォーカスを取得するかどうか
  • state_window_focused: ウィンドウフォーカスを取得するかどうか
  • state_enabled: コントロールが利用可能かどうか
  • state_checkable: コントロールがチェックできるかどうか、例: checkbox
  • state_checked: コントロールがチェックされているかどうか
  • state_selected: コントロールが選択されているかどうかスクロールホイールの状況
  • state_pressed: コントロールが押されているかどうか
  • state_active: コントロールがアクティブかどうか、例: sliderTab
  • state_single: コントロールに複数のサブコントロールが含まれている場合、サブコントロールを 1 つだけ表示します
  • state_first : コントロールに複数の子コントロールが含まれる場合、最初の子コントロールが表示された状態であるかどうかを判断します
  • state_middle: コントロールに複数の子コントロールが含まれる場合、中央の子コントロールが表示されているかどうかを判断しますコントロールは表示状態にあります
  • state_last: コントロールには複数の子コントロールコントロールが含まれており、最後のサブコントロールが表示状態にあるかどうかを判断します

使用例:

それでは単純な丸いボタンを書いてみましょう!

レンダリングの実行:

7.gif

コード実装:

次に、最初にshapeDrawableを使用して、異なる色で2つの角丸長方形を描画します:

shape_btn_normal.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#DD788A"/>
    <corners android:radius="5dp"/>
    <padding android:top="2dp" android:bottom="2dp"/>
</shape>

それではセレクターを書いてみましょう: selctor_btn.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/shape_btn_pressed"/>
    <item android:drawable="@drawable/shape_btn_normal"/>
</selector>

次に、ボタン android:background="../style/images/selctor_btn" を設定するだけです~ 必要に応じて長方形、楕円、円などに変更できます。


このセクションの概要:

さて、Android の 13 種類の Drawable の説明は終わりました。もちろん、これは実際には単なる基本です。 開発中にはさまざまな高レベルの使用法があるはずで、それを拡張するのは皆さんの責任です。ここで紹介するのは、皆さん向けの単なるガイドです。

まあ、時間の制約により、上記の例を 1 つずつ試したので、最終的なデモはめちゃくちゃになったかもしれません。 これらのマテリアルが必要な場合は、必要に応じて投稿し、ご自身でダウンロードしてください: DrawableDemo.zip それでは、ありがとうございます ~ 楽しい週末をお過ごしください