Android の 13 個の Drawable のまとめ パート 2
、
このセクションの概要:
: ビットマップをディザリングするかどうかこのセクションでは、前のセクションで学習したとおりです:
NinePatchDrawable;
GradientD生 ! これらの 4 つの描画可能~ このセクションでは、次の 5 つの Drawable について学習していきます。 13種類の描画可能なマップ:
さて、このセクションを始めましょう〜
1.BitmapDrawable
ビットマップのカプセル化の一種で、BitmapDrawable 領域でラップするビットマップの描画メソッドを設定できます。次のものが含まれます。 タイル塗りつぶし、拡大塗りつぶし、または画像の元のサイズを維持します。<ビットマップ> をルート ノードとして使用します。 オプションの属性は次のとおりです:
src: 画像リソース ~
antialias: アンチエイリアスをサポートするかどうかfilter: ビットマップ フィルターをサポートするかどうか (サポートされている場合、画像をより多く表示できます)スムーズに
dither
gravity
: ビットマップがコンテナより小さい場合、コンテナ内のビットマップの相対位置を設定できますtileMode
: ビットマップのモードを指定します画像タイル充填コンテナの場合は、これを設定します。その場合、重力属性は無視され、次のオプションの値になります:disabled
InsetDrawable- (パターン全体が引き伸ばされてタイル化される)、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 属性と似ていますが、padding は Drawable のコンテンツと Drawable 自体は、コントロールに必要な
背景が実際の境界線よりも大きい場合、2つのDrawableとコンテナの間のマージンを表します 私が若かった頃は、InsetDrawable を使用する方が適していました。たとえば、これを使用すると、カスタム ダイアログと画面の間の問題を解決できます。 スペースの問題です。これをやったことのある友人は、layout_margin を設定しても役に立たないことを知っていると思います。 この InsetDrawable はいつでも使用できます。InsetDrawable に insetXxx を設定し、別の値を設定するだけです。 方向に余白を付けて、ダイアログの背景に設定します!
関連する属性は次のとおりです: ① XMLで使用します: Javaコードで使用します: レンダリングを使用します : Clip はカットとして翻訳できます。ClipDrawable はビットマップからパーツを切り取るものとして理解できます。
Android のプログレス バーは、設定されたレベル値に基づいてクリッピングを決定する ClipDrawable を使用して実装されます。
領域のサイズ、ルート ノードは <clip> 関連するプロパティは次のとおりです: 使用例: Core: コードを通じて ClipDrawable のレベル値を変更します。レベルの値は0~10000です! レンダリングの実行: コード実装: ①ClipDrawableリソースxmlを定義: ②activity_mainメインレイアウトファイルにImageViewを設定し、srcをclipD rawableに設定します! 覚えておいてくださいこれは src です。blackground として記述すると、null ポインタが報告されます!!! ③MainActivity.java は setLevel を通じてインターセプト領域のサイズを設定します: わかりました、それは興味深いですね、私に聞かないでください女の子の写真を入手するには、Baidu にたくさんあります~ は Drawable を回転するために使用され、回転も setLevel を通じて制御されます。最大値も 10000 です。関連する属性は次のとおりです : 使用例 レンダリングの実行 コードの実装 3番目のclipDrawableの変更point! ①回転Drawableを定義する リソースファイル<?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" />
InsetDrawable insetDrawable = new InsetDrawable(getResources()
.getDrawable(R.drawable.test1), 10, 10, 10, 10);
3.ClipDrawable
<?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" />
<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>
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);
}
}
4.RotateDrawable
:
角度図は次のとおりです<?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 を使用すると非常に便利です~
使用例
レンダリングの実行
:コード実装
:①まず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 を紹介します。これを実際の開発に適用してみてはいかがでしょうか。 ふふふ、以上です、ありがとうございます! さらに、ある読者から、以前の記事を削除しないでほしいというプライベート メッセージが届きました。それについてはここでお話しましょう。 これと似たセクションなど、重複した部分だけを削除してください~ もちろんバックアップも行います!削除された記事はバックアップされます~ 心配しないでください。