VectorDrawable対応ノート

2173 ワード

VectorDrawableを使用する場合は、Android 5.0以下のバージョンと互換性があります.以下の点に注意してください.
1.ImageViewImageButtonで使用(ActivityはAppCompatActivityから継承されます.そうでない場合はAppCompatImageViewを使用します)
ImageViewのようなコントロールでは、Vector画像を互換化するには、以前のandroid:srcプロパティをapp:srcCompatに置き換えるだけで、サンプルコードは以下のようになります.


コードに設定する場合はsetBackgroundResourceメソッドを使用して設定できます.コードは次のようになります.
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageResource(R.drawable.vector_image);

2.非ImageViewコントロール(Button、TextViewなど)をBackground、ComponentoundDrawableとして使用する場合、Activityに以下の宣言を加える必要があります
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

また、xmlレイアウトファイルで直接使用する場合は、selector、layer-listというコンテナで包む必要があり、直接使用できません(コードで設定する必要はありません)

    


3.GoogleはすでにVector画像に対してAndroid 2.1以上の互換性を行っているが、ダイナミックVectorアニメーションについては、以下のような制限が多い.
1)Path Morphing,すなわちパス変換アニメーションは,Android pre-Lバージョンでは使用できない(動かない).2)Path Interpolation,すなわちパス補間器は,Android pre-Lバージョンではシステムの補間器しか使用できず,カスタマイズできない.3)Path Animation,すなわちパスアニメーション,これは一般的にベッセル曲線で代用されるため,あまり影響しない.
4.低バージョンでの互換性の問題に加え、Lバージョン以上では、AppCompatActivityのインタフェースを継承しているという互換性の問題もあります.ImageViewのsrc Compatを直接設定すると、デフォルトのAppCompatActivityがImageView Compatをデフォルトで使用して変換されているため、Path Morphingアニメーションは有効になりません.ただし、AnimatedVectorDrawableCompatではPath Morphingアニメーションはサポートされていないため、AppCompatActivityインタフェースでは無効になります.
解決策は簡単です.つまり、コードを使用してImageViewにアニメーションを追加します.
ImageView imageView = (ImageView) view;
AnimatedVectorDrawable morphing = (AnimatedVectorDrawable)getDrawable(morphing);
imageView.setImageDrawable(morphing);
if (morphing != null) {
    morphing.start();
}

注意AnimatedVectorDrawableCompatは使用しないでください.
詳しくは、この文章はよく説明されています.
Android Vectorの曲がりくねった互換性の道:http://blog.csdn.net/eclipsexys/article/details/51838119