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


このセクションの概要:

このセクションでは、前のセクションで学習したとおりです:
NinePatchDrawable;
GradientD生 ! これらの 4 つの描画可能~ このセクションでは、次の 5 つの Drawable について学習していきます。 13種類の描画可能なマップ:

さて、このセクションを始めましょう〜

1.BitmapDrawable
ビットマップのカプセル化の一種で、BitmapDrawable 領域でラップするビットマップの描画メソッドを設定できます。次のものが含まれます。 タイル塗りつぶし、拡大塗りつぶし、または画像の元のサイズを維持します。<ビットマップ> をルート ノードとして使用します。 オプションの属性は次のとおりです:

src: 画像リソース ~
antialias: アンチエイリアスをサポートするかどうか

filter1.png: ビットマップ フィルターをサポートするかどうか (サポートされている場合、画像をより多く表示できます)スムーズに

dither
: ビットマップをディザリングするかどうか

gravity
: ビットマップがコンテナより小さい場合、コンテナ内のビットマップの相対位置を設定できます

tileMode

: ビットマップのモードを指定します画像タイル充填コンテナの場合は、これを設定します。その場合、重力属性は無視され、次のオプションの値になります:
    disabled
  • (パターン全体が引き伸ばされてタイル化される)、clamp (元の画像サイズ)、
  • repeat
  • (タイル化される) )、mirror (ミラータイル) )
  • 対応するレンダリング:
  • ①XML定義BitmapDrawable:
    <?xml version="1.0" encoding="utf-8"?>  
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"  
        android:dither="true"  
        android:src="@drawable/ic_launcher"  
        android:tileMode="mirror" />
  • ②同じ効果を実現するJavaコード:
    BitmapDrawable bitDrawable = new BitmapDrawable(bitmap);  
    bitDrawable.setDither(true);  
    bitDrawable.setTileModeXY(TileMode.MIRROR,TileMode.MIRROR);
    2.InsetDrawable は、Drawable を別の Drawable の内部に埋め込み、内部にスペースを残すことを意味します。 Drawable の padding 属性と似ていますが、paddingDrawable のコンテンツと Drawable 自体
  • の間のマージンを表します。 そして、
InsetDrawable

は、コントロールに必要な

背景が実際の境界線よりも大きい場合、

2つのDrawableとコンテナの間のマージン4.pngを表します 私が若かった頃は、InsetDrawable を使用する方が適していました。たとえば、これを使用すると、カスタム ダイアログと画面の間の問題を解決できます。 スペースの問題です。これをやったことのある友人は、layout_margin を設定しても役に立たないことを知っていると思います。 この InsetDrawable はいつでも使用できます。InsetDrawable に insetXxx を設定し、別の値を設定するだけです。 方向に余白を付けて、ダイアログの背景に設定します!

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

  • 1.drawable: 参照されるDrawableは、空の場合、Drawableタイプの子ノードを持つ必要があります!
  • 2.visible: Drawableにスペースがあるかどうかを設定します
  • 3.insetLeft,insetRightinsetTopinsetBottm: 左右上下の余白を設定します

① XMLで使用します:

<?xml version="1.0" encoding="utf-8"?>  
<inset xmlns:android="http://schemas.android.com/apk/res/android"  
    android:drawable="@drawable/test1"  
    android:insetBottom="10dp"  
    android:insetLeft="10dp"  
    android:insetRight="10dp"  
    android:insetTop="10dp" />

Javaコードで使用します:

InsetDrawable insetDrawable = new InsetDrawable(getResources()  
        .getDrawable(R.drawable.test1), 10, 10, 10, 10);

レンダリングを使用します :

2.png

3.ClipDrawable

Clip はカットとして翻訳できます。ClipDrawable はビットマップからパーツを切り取るものとして理解できます。 Android のプログレス バーは、設定されたレベル値に基づいてクリッピングを決定する ClipDrawable を使用して実装されます。 領域のサイズ、ルート ノードは <clip>

関連するプロパティは次のとおりです:

  • clipOrietntion: クリップの方向を設定します。水平と垂直を設定できます。方向
  • gravity : その位置からトリミングを開始します
  • drawable: 参照されたドローアブル リソース。空の場合は、Drawable タイプの子ノードを持つ必要があります ps: この Drawable タイプの子ノード: <clip>:このようにステートメントを追加するだけです...

使用例:

Core: コードを通じて ClipDrawable のレベル値を変更します。レベルの値は0~10000です!

レンダリングの実行:

3.png

コード実装:

①ClipDrawableリソースxmlを定義:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="horizontal"
    android:drawable="@mipmap/ic_bg_meizi"
    android:gravity="left" />

②activity_mainメインレイアウトファイルにImageViewを設定し、srcをclipD rawableに設定します! 覚えておいてくださいこれは src です。blackground として記述すると、null ポインタが報告されます!!!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/img_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/clip_bg" />

</LinearLayout>

③MainActivity.java は setLevel を通じてインターセプト領域のサイズを設定します:

public class MainActivity extends AppCompatActivity {

    private ImageView img_show;
    private ClipDrawable cd;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                cd.setLevel(cd.getLevel() + 500);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        // 核心实现代码
        cd = (ClipDrawable) img_show.getDrawable();
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(0x123);
                if (cd.getLevel() >= 10000) {
                    timer.cancel();
                }
            }
        }, 0, 300);
    }
}

わかりました、それは興味深いですね、私に聞かないでください女の子の写真を入手するには、Baidu にたくさんあります~


4.RotateDrawable

は Drawable を回転するために使用され、回転も setLevel を通じて制御されます。最大値も 10000

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

  • fromDegrees: 開始角度、最低レベル値に対応、デフォルトは0です
  • toDegrees: 終了角度、最高レベル値に対応、デフォルトは360です
  • pivotX: のxを設定します参照点の座標、値は 0 ~ 1、デフォルトは 50%、つまり 0.5 です
  • pivotY: 参照点の Y 座標を設定します、値は 0 ~ 1、デフォルトは 50%、 0.5です ps: 回転した画像が完全に表示されない場合は、上記の 2 つの値を変更して解決できます。
  • drawable: ビットマップ リソースを設定します。
  • visible: ドローアブルが表示されるかどうかを設定します。
角度図は次のとおりです
:

1.jpg使用例

:

レンダリングの実行

:

1.jpgコードの実装

:

3番目のclipDrawableの変更point!

①回転Drawableを定義する リソースファイル

:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/ic_launcher"
    android:fromDegrees="-180"
    android:pivotX="50%"
    android:pivotY="50%" />
②activity_main.xmlで、Srcを上記のDrawableを指すように変更するだけで、ClipDrawable

をrotateDrawable!

public class MainActivity extends AppCompatActivity {

    private ImageView img_show;
    private RotateDrawable cd;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                if (cd.getLevel() >= 10000)
                    Toast.makeText(MainActivity.this, "转完了~",
                            Toast.LENGTH_LONG).show();
                cd.setLevel(cd.getLevel() + 400);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        // 核心实现代码
        cd = (RotateDrawable) img_show.getDrawable();
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(0x123);
                if (cd.getLevel() >= 10000) {
                    timer.cancel();
                }
            }
        }, 0, 100);
    }
}
5に変更するだけです。 .AnimationDrawable


このセクションの最後の Drawable、AnimationDrawable は、Android のミッドフレーム アニメーションを実装するために使用されます。 Android では描画可能で、特定の順序でフレームごとに再生されるアニメーションが比較的豊富です。これには、従来のトゥイーン アニメーション、パン、 ズームやその他のエフェクトですが、ここではアルファ、スケール、フレームアニメーションを実装するためにこのAnimationDrawableのみを紹介します。 移動、回転などについては、後でアニメーションの章で詳しく説明します~

ここでは <

animation-list

> をルート ノードとして使用します

関連する属性メソッド
:

oneshot
: ループ再生するかどうかを設定します。 false はループ再生を意味します。

duration: フレーム間隔時間。通常は 300 ミリ秒に設定します。 AniamtionDrawable インスタンスを取得した後、その start() メソッドを呼び出してアニメーションを再生する必要があります。さらに、次のことに注意する必要があります。 OnCreate() メソッドで呼び出された場合は、ビューの初期化がまだ完了していないため、効果はありません。 シンプルなハンドラーを使用してアニメーションの再生を遅らせます! もちろん、他の方法もあります。次のリンクを参照してください: Android AnimeDrawable を実行するいくつかの方法 フレーム アニメーションを実装するには、AnimationDrawable を使用すると非常に便利です~

使用例
:

レンダリングの実行

:

1.jpgコード実装

:

まずAnimationDrawableのxmlリソースファイルを定義します

:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading01"
        android:duration="100" />

    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading02"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading03"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading04"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading05"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading06"
        android:duration="100" />

</animation-list>
②activity_main.xmlでsrcを設定し、次にMainActivity

で:

public class MainActivity extends AppCompatActivity {

    private ImageView img_show;
    private AnimationDrawable ad;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        // 核心实现代码
        ad = (AnimationDrawable) img_show.getDrawable();
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ad.start();
            }
        }, 300);
    }
}

とても簡単です。将来、フレーム アニメーションを使用する必要がある場合は、AnimationDrawable を直接使用するだけです。 もちろん、制御を必要としないフレーム アニメーションにのみ適しています。たとえば、上記はスーパー テーブルをプルダウンして更新するときのプログレス バーの素材です。 シンプルなフレームアニメーションを作りました!必要に応じて自分で拡張してください~


このセクションの概要:

このセクションでは、さらに 5 つの Drawable を紹介します。これを実際の開発に適用してみてはいかがでしょうか。 ふふふ、以上です、ありがとうございます! さらに、ある読者から、以前の記事を削除しないでほしいというプライベート メッセージが届きました。それについてはここでお話しましょう。 これと似たセクションなど、重複した部分だけを削除してください~ もちろんバックアップも行います!削除された記事はバックアップされます~ 心配しないでください。