web-dev-qa-db-ja.com

以前のバージョンと比較したAndroid L Developer PreviewのDrawable Tintingの新機能は何ですか?

私は新しいAndroid Lプレビューの作業をしており、ドローアブルの着色コンセプトを扱っています。

Android Lデベロッパープレビューで、ドローアブルの色合いに関して何か新しい点があるかどうか知りたい。

私はこれを読みます このドキュメント これは言う:

Android L Developer Previewを使用すると、ビットマップまたは9パッチをアルファマスクとして定義し、色リソースまたは色リソースに解決されるテーマ属性(例:?android:attr/colorPrimary)。これらのアセットは一度だけ作成でき、テーマに合わせて自動的に色を付けることができます。

でも前バージョンとどう違うのか分からなかった。画像に色合いを付けるためにColorFilterまたはPorterDuffColorFilterを使用する方法を知っています。これに関するどんな助けでもありがたいです。

20
BinaryGuy

L以降、ティントをXMLで指定できます。これらは、(示されているように)テーマ属性、カラー状態リスト、カラーリソース、または明示的な16進カラーコードを参照できます。デフォルトでは、ティントモードはSRC_INですが、Android:tintMode属性を使用して他のモードに設定できます。

<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/my_icon"
    Android:tint="?android:attr/colorControlNormal" />

デフォルトのコントロールはすべて、通常の状態(たとえば、チェックされていないチェックボックス)に?android:attr/colorControlNormalを使用し、アクティブ化された状態(たとえば、チェックされているチェックボックス)に?android:attr/colorControlActivated(デフォルトで?android:attr/colorAccentにマップ)を使用します。チェックボックス)。

独自のアプリドローアブルでこれらの属性を使用してデフォルトのフレームワークの色を継承するか、属性を再定義してデフォルトまたはアクティブ化されたコントロールの色を変更できます。アプリに固有の属性を参照することもできます(図を参照)。

<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/my_icon"
    Android:tint="?attr/myThemeAttribute" />
21
alanv

新しいAndroidサポートライブラリ22.1を使用して、着色のサポートを強化!

サポートV4ライブラリは、Androidサポートライブラリの多くのベースとして機能し、下位互換性をはるかに容易にすることに焦点を当てたクラスの多くが含まれています。

DrawableCompatがAPI 4に描画可能な色合いを取り戻すようになりました:DrawableCompat.wrap(Drawable)を介してDrawableをラップするだけで、setTint()、setTintList()、およびsetTintMode()が機能するだけです。色!

Chris Banesブログの情報:

Drawable tinting Lollipopに追加されたDrawable tintingメソッドは、アセットを動的に色付けするのに非常に便利です。 AppCompatは、v21サポートライブラリで独自に実装されていましたが、今ではそれをsupport-v4のDrawableCompatに抽出して、誰もが使用できるようにしています。それがどのように機能するかを知ることは重要です。

_Drawable drawable = ...;

// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);

// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
_

覚えておくべきことは、DrawableCompat.wrap()を呼び出した後、結果が指定した型と同じであることを信頼できないことです。代わりに、DrawableCompat.unwrap()を使用して元のDrawableを取得する必要があります。

内部的には、特別な「色合いドローアブル」でDrawableをラップし、指定された色合いからドローアブルのカラーフィルターを自動的に更新します。これにより、ColorStateListインスタンスを処理できます。

しかし、どうやってそれをxmlで使用するのか疑問に思います!!というオプションがあります

_<TintImageView
Android:layout_width=""
Android:layout_height="" 
Android:src=""
Android:backgroundTint="@color/green"/>
_

しかし、EditText TextViewの描画可能な左|右アイコンを変更したい場合、それを行う方法はありません。

13
LOG_TAG