ベクター型ドローアブルの概要

Compose を試す
Jetpack Compose は、Android に推奨される UI ツールキットです。Compose でグラフィックを表示する方法を学習します。
<ph type="x-smartling-placeholder"></ph> ImageVector →

要点

  • ベクター型ドローアブルとは、XML ファイル内で、点、線、形のセットとして定義されるベクター グラフィックのことです。 関連する色情報が含まれます。
  • ベクター型ドローアブルは拡張性があるため、表示品質を損なうことなくサイズを変更できます。 アプリのサイズを小さくできるため、Android アプリでの使用に最適です。 パフォーマンスを向上させます。
  • Android Studio でベクター型ドローアブルを作成するには、drawable フォルダを右クリックします。 [新規] >ベクター アセット。また、SVG ファイルを ベクター型ドローアブルとしての Android Studio。
で確認できます。 2023 年 7 月 24 日に Google Bard により生成された概要

はじめに

VectorDrawable は、定義されたベクター グラフィックです。 関連するポイント、線、曲線のセットとして XML ファイルに記述し、 色情報。ベクター型ドローアブルを使用する主な利点は、 拡張性に優れています画質を損なわずにスケーリングできるため、 同じファイルをさまざまな画面密度向けにサイズ変更しても、画質は損なわれません。 これにより、APK ファイルが小さくなり、デベロッパーによる保守が少なくなります。また、 複数の XML ファイルではなく複数の XML ファイルを使用して、アニメーションにベクター画像を使用する 各ディスプレイ解像度の画像が表示されます。

このページと以下の動画では、XML でベクター型ドローアブルを作成する方法の概要を説明します。 Android Studio では、SVG ファイルをベクター型ドローアブル形式に変換することもできます。詳しくは、 [多密度のベクター グラフィックを追加する] を使用します。

Android 5.0(API レベル 21)は、ベクター型ドローアブルを公式にサポートした最初のバージョンです。 VectorDrawableAnimatedVectorDrawable、ただし 古いバージョンをサポートするには、Android サポート ライブラリを使用します。 VectorDrawableCompatAnimatedVectorDrawableCompat クラス。

VectorDrawable クラスについて

VectorDrawable は静的ドローアブルを定義します。 渡されます。SVG 形式と同様に、各ベクター グラフィックは path オブジェクトと group オブジェクトで構成されます。 各 path には、オブジェクトのアウトラインのジオメトリと group には変換の詳細が含まれます。すべてのパスが描画される XML ファイルに記述されているのと同じ順序で表示されます。

図 1. ベクター型ドローアブル アセットの階層の例

ベクター アセット studio ツールを使用すると、プロジェクトにベクター グラフィックを簡単に追加できます。 XML ファイルとしてエクスポートできます

XML の例

画像を表示する VectorDrawable XML ファイルの例を以下に示します。 自動的にシャットダウンします。

<!-- res/drawable/battery_charging.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="24dp"
    android:width="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
   <group
         android:name="rotationGroup"
         android:pivotX="10.0"
         android:pivotY="10.0"
         android:rotation="15.0" >
      <path
        android:name="vect"
        android:fillColor="#FF000000"
        android:pathData="M15.67,4H14V2h-4v2H8.33C7.6,4 7,4.6 7,5.33V9h4.93L13,7v2h4V5.33C17,4.6 16.4,4 15.67,4z"
        android:fillAlpha=".3"/>
      <path
        android:name="draw"
        android:fillColor="#FF000000"
        android:pathData="M13,12.5h2L11,20v-5.5H9L11.93,9H7v11.67C7,21.4 7.6,22 8.33,22h7.33c0.74,0 1.34,-0.6 1.34,-1.33V9h-4v3.5z"/>
   </group>
</vector>

この XML により、次の画像がレンダリングされます。

AnimatedVectorDrawable クラスについて

AnimatedVectorDrawable は、ベクターのプロパティにアニメーションを追加します。 。1 つのアニメーション ベクター グラフィックを 3 つの独立した リソース ファイルや、ドローアブル全体を定義する単一の XML ファイルとして使用できます。では、 理解を深めるために、複数の XML ファイル単一 XML ファイル

複数の XML ファイル

この方法により、次の 3 つの XML ファイルを個別に定義できます。

複数の XML ファイルの例

次の XML ファイルは、ベクター グラフィックのアニメーションを示しています。

  • VectorDrawable の XML ファイル: vd.xml
  • <vector xmlns:android="http://schemas.android.com/apk/res/android"
       android:height="64dp"
       android:width="64dp"
       android:viewportHeight="600"
       android:viewportWidth="600" >
       <group
          android:name="rotationGroup"
          android:pivotX="300.0"
          android:pivotY="300.0"
          android:rotation="45.0" >
          <path
             android:name="vectorPath"
             android:fillColor="#000000"
             android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
       </group>
    </vector>
    
  • AnimatedVectorDrawable の XML ファイル: avd.xml
  • <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
       android:drawable="@drawable/vd" >
         <target
             android:name="rotationGroup"
             android:animation="@anim/rotation" />
         <target
             android:name="vectorPath"
             android:animation="@anim/path_morph" />
    </animated-vector>
    
  • AnimatedVectorDrawable の XML で使用される Animator XML ファイル ファイル: rotation.xmlpath_morph.xml
  • <objectAnimator
       android:duration="6000"
       android:propertyName="rotation"
       android:valueFrom="0"
       android:valueTo="360" />
    
    <set xmlns:android="http://schemas.android.com/apk/res/android">
       <objectAnimator
          android:duration="3000"
          android:propertyName="pathData"
          android:valueFrom="M300,70 l 0,-70 70,70 0,0   -70,70z"
          android:valueTo="M300,70 l 0,-70 70,0  0,140 -70,0 z"
          android:valueType="pathType"/>
    </set>
    

単一の XML ファイル

この方法を使用すると、関連する XML ファイルを 1 つの XML バンドル形式を使用した XML ファイル。アプリのビルド時に、 aapt タグは個別のリソースを作成し、 アニメーション化します。この方法を使用するには、Build Tools バージョン 24 以降が必要です。また、 下位互換性があります。

単一の XML ファイルの例

<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="android:drawable">
        <vector
            android:width="24dp"
            android:height="24dp"
            android:viewportWidth="24"
            android:viewportHeight="24">
            <path
                android:name="root"
                android:strokeWidth="2"
                android:strokeLineCap="square"
                android:strokeColor="?android:colorControlNormal"
                android:pathData="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" />
        </vector>
    </aapt:attr>
    <target android:name="root">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:propertyName="pathData"
                android:valueFrom="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7"
                android:valueTo="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4"
                android:duration="300"
                android:interpolator="@android:interpolator/fast_out_slow_in"
                android:valueType="pathType" />
        </aapt:attr>
    </target>
</animated-vector>

ベクター型ドローアブルの下位互換性ソリューション

以前のバージョンのプラットフォームを搭載したデバイスでベクター型ドローアブルとアニメーション化ベクター型ドローアブルをサポートする 使用するか、fillColorfillType、および Android 7.0(API レベル 24)以前の strokeColor 機能、 VectorDrawableCompat および AnimatedVectorDrawableCompat 次の 2 つのサポート ライブラリから入手できます。 support-vector-drawableanimated-vector-drawable、 できます。

Android Studio 1.4 で導入されたベクトルの限定的な互換性サポート ビルド時に PNG ファイルを生成することで、ドローアブルを使用できます。ただし、ベクター型ドローアブルでは アニメーション化ベクター型ドローアブルのサポート ライブラリは柔軟性と 幅広い互換性があります。サポート ライブラリであるため、 Android プラットフォームのバージョンが Android 2.1(API レベル 7 以降)に。ファイアウォール ルールを ベクトル サポート ライブラリを使用するには、vectorDrawables を追加します。 要素をアプリ モジュールの build.gradle ファイルに追加します。

次のコード スニペットを使用して vectorDrawables を構成します。 要素:

Groovy

// For Gradle Plugin 2.0+
android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

Kotlin

// For Gradle Plugin 2.0+
android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

Groovy

// For Gradle Plugin 1.5 or below
android {
    defaultConfig {
        // Stops the Gradle plugin’s automatic rasterization of vectors
        generatedDensities = []
    }
    // Flag notifies aapt to keep the attribute IDs around
    aaptOptions {
        additionalParameters "--no-version-vectors"
    }
}

Kotlin

// For Gradle Plugin 1.5 or below
android {
    defaultConfig {
        // Stops the Gradle plugin’s automatic rasterization of vectors
        generatedDensities()
    }
    // Flag notifies aapt to keep the attribute IDs around
    aaptOptions {
        additionalParameters("--no-version-vectors")
    }
}

VectorDrawableCompat を使用できます。 および AnimatedVectorDrawableCompat(すべて) Android 4.0(API レベル 14)以降を搭載しているデバイスで利用できます。Android の ドローアブルを読み込みます。XML など、ドローアブル ID を受け入れるすべての場所とは限りません。 ベクター型ドローアブルの読み込みをサポートします。「 android.support.v7.appcompat パッケージに番号を追加しました ベクター型ドローアブルを簡単に使用できます。まず android.support.v7.appcompat 個のパッケージ ImageView、または ImageButtonFloatingActionButton、できること 新しい app:srcCompat 属性を使用してベクター型ドローアブルを参照する および android:src で使用できるその他のドローアブル:

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:srcCompat="@drawable/ic_add" />

実行時にドローアブルを変更するには、 setImageResource() メソッドを使用します。AppCompat の使用 app:srcCompat は、最も確実な統合方法です。 ベクター型ドローアブルをアプリに追加できます。

Support Library 25.4.0 以降では、次の機能がサポートされています。

  • パスモーフィング(PathType エバリュエータ) モーフィングに使用されます。 変換する場合です
  • パス補間: 柔軟なパス (パスとして表される)を使用して、システム定義の LinearInterpolator などの interpolator を使用できるようになります。

サポート ライブラリ 26.0.0-beta1 以降では、次の機能がサポートされています。

  • パスに沿って移動: ジオメトリ オブジェクトは移動できます。 アニメーションの一環として任意のパスに沿って表示できます。

サポート ライブラリを使用した複数の XML ファイルの例

次の XML ファイルは、複数の XML ファイルを使用する場合のアプローチを示しています。 ベクターグラフィックをアニメーション化します。

  • VectorDrawable の XML ファイル: vd.xml
  • <vector xmlns:android="http://schemas.android.com/apk/res/android"
       android:height="64dp"
       android:width="64dp"
       android:viewportHeight="600"
       android:viewportWidth="600" >
       <group
          android:name="rotationGroup"
          android:pivotX="300.0"
          android:pivotY="300.0"
          android:rotation="45.0" >
          <path
             android:name="vectorPath"
             android:fillColor="#000000"
             android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
       </group>
    </vector>
    
  • AnimatedVectorDrawable の XML ファイル: avd.xml
  • <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
       android:drawable="@drawable/vd" >
         <target
             android:name="rotationGroup"
             android:animation="@anim/rotation" />
    </animated-vector>
    
  • AnimatedVectorDrawable の XML で使用されるアニメーター XML ファイル ファイル: rotation.xml
  • <objectAnimator
       android:duration="6000"
       android:propertyName="rotation"
       android:valueFrom="0"
       android:valueTo="360" />
    

単一の XML ファイル

次の XML ファイルは、単一の XML ファイルを使用する方法を示しています。 ベクターグラフィックをアニメーション化します。アプリのビルド時に、 aapt タグは個別のリソースを作成し、 アニメーション化します。この方法を使用するには、Build Tools バージョン 24 以降が必要です。また、 下位互換性があります。

サポート ライブラリを使用した単一の XML ファイルの例

<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="android:drawable">
        <vector xmlns:android="http://schemas.android.com/apk/res/android"
            android:width="64dp"
            android:height="64dp"
            android:viewportWidth="600"
            android:viewportHeight="600">
            <group
                android:name="rotationGroup"
                android:pivotX="300"
                android:pivotY="300"
                android:rotation="45.0" >
                <path
                    android:name="vectorPath"
                    android:fillColor="#000000"
                    android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
            </group>
        </vector>
    </aapt:attr>
    <target android:name="rotationGroup">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:propertyName="rotation"
                android:valueFrom="0"
                android:valueTo="360"
                android:duration="6000"
                android:interpolator="@android:interpolator/fast_out_slow_in" />
        </aapt:attr>
    </target>
</animated-vector>