Çok yoğunluklu vektör grafikleri ekleme (Görünümler)

Kavramlar ve Jetpack Compose uygulaması

Android Studio, materyal simgeleri eklemenize ve Ölçeklenebilir Vektör Grafiği (SVG) ile Adobe Photoshop Belgesi (PSD) dosyalarını projenize drawable vektör kaynakları olarak içe aktarmanıza yardımcı olan Vector Asset Studio adlı bir araç içerir. Bit eşlemler yerine vektör çizilebilir öğeler kullanmak, aynı dosya farklı ekran yoğunlukları için yeniden boyutlandırıldığında görüntü kalitesinde kayıp yaşanmadığından APK'nızın boyutunu küçültür. Vektör çizilebilir öğeleri desteklemeyen Android'in eski sürümlerinde, Vector Asset Studio, derleme sırasında vektör çizilebilir öğelerinizi her ekran yoğunluğu için farklı bit eşlem boyutlarına dönüştürebilir.

Vector Asset Studio hakkında

Vector Asset Studio, projeye resmi açıklayan bir XML dosyası olarak vektör grafik ekler. Tek bir XML dosyasını korumak, çeşitli çözünürlüklerdeki birden fazla raster grafiği güncellemekten daha kolay olabilir.

Android 4.4 (API düzeyi 20) ve önceki sürümlerde vektör çizilebilir öğeler desteklenmez. Minimum API düzeyiniz bu API düzeylerinden birine ayarlanmışsa Vector Asset Studio'yu kullanırken iki seçeneğiniz vardır: Taşınabilir Ağ Grafiği (PNG) dosyaları oluşturma (varsayılan) veya AndroidX'te geriye dönük uyumluluk tekniğini kullanma.

Vector Asset Studio, geriye dönük uyumluluk için drawable vektör öğesinin raster görüntülerini oluşturur. Vektör ve raster çizilebilir öğeler, APK'da birlikte paketlenir. Java kodunda vektör çizilebilir öğelerini Drawable, XML kodunda ise @drawable olarak adlandırabilirsiniz. Uygulamanız çalıştığında, API düzeyine bağlı olarak ilgili vektör veya raster resim otomatik olarak gösterilir.

AndroidX'te geriye dönük uyumluluk

Bu teknik için AndroidX 1.0 veya sonraki bir sürüm ve Gradle için Android eklentisinin 3.2 veya sonraki bir sürümü gerekir. Ayrıca yalnızca vektör çizilebilir öğeler kullanılır. AndroidX'teki VectorDrawableCompat sınıfı, Android 2.1 (API düzeyi 7) ve sonraki sürümlerde VectorDrawable desteği sunmanıza olanak tanır.

Vector Asset Studio'yu kullanmadan önce build.gradle dosyanıza bir ifade eklemeniz gerekir:

Modern

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.7.1'
}

Kotlin

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

dependencies {
    implementation("androidx.appcompat:appcompat:1.7.1")
}

Ayrıca, geriye dönük uyumluluk için AndroidX kodlama tekniklerini kullanmanız gerekir. Örneğin, vektör çizilebilir öğeler için android:src özelliği yerine app:srcCompat özelliğini kullanabilirsiniz. Daha fazla bilgi için AndroidX sayfasına bakın.

Düzenlere drawable vektör ekleme

Bir düzen dosyasında, ImageButton, ImageView gibi simgeyle ilgili tüm widget'ları drawable vektör öğesine yönlendirecek şekilde ayarlayabilirsiniz. Örneğin, aşağıdaki düzende bir düğmede gösterilen bir vektör çizilebilir öğesi gösterilmektedir:

Şekil 1. Bir düzendeki düğmede gösterilen drawable vektör.

Şekilde gösterildiği gibi, bir widget'ta vektör drawable göstermek için:

  1. Bir proje açın ve bir vektör çizilebilir öğesi içe aktarın.

    Bu örnekte, Yeni Proje Sihirbazı ile oluşturulan bir Telefon/Tablet projesi kullanılmaktadır.

  2. Proje penceresinin Android görünümünde, content_main.xml gibi bir düzen XML dosyasını çift tıklayın.

  3. Tasarım sekmesini tıklayarak Layout Editor'ı görüntüleyin.

  4. ImageButton widget'ını Palet penceresinden Layout Editor'a sürükleyin.

  5. Kaynaklar iletişim kutusunda, sol bölmede Drawable'ı, ardından içe aktardığınız vektör çizilebilir öğesini seçin. Tamam'ı tıklayın.

    Drawable vektör, düzendeki ImageButton üzerinde görünür.

  6. Resmin rengini temada tanımlanan vurgu rengiyle değiştirmek için Özellikler penceresinde ton özelliğini bulun ve seçeneğini tıklayın .

  7. Kaynaklar iletişim kutusunda, sol bölmede Renk'i, ardından colorAccent'i seçin. Tamam'ı tıklayın.

    Resmin rengi, düzendeki vurgu rengine dönüşür.

Proje AndroidX kullanıyorsa ImageButton kodu aşağıdaki gibi olmalıdır:

<ImageButton
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:srcCompat="@drawable/ic_build_black_24dp"
  tools:layout_editor_absoluteX="11dp"
  tools:layout_editor_absoluteY="225dp"
  android:id="@+id/imageButton"
  android:tint="@color/colorAccent" />

Projede AndroidX kullanılmıyorsa drawable vektör kodu android:src="@drawable/ic_build_black_24dp" olur.

Kodda drawable vektöre referans verme

Kodunuzda genellikle bir vektör çizilebilir kaynağı genel bir şekilde referans gösterebilirsiniz. Uygulamanız çalıştığında, API düzeyine bağlı olarak karşılık gelen vektör veya raster resim otomatik olarak gösterilir:

  • Çoğu durumda, XML kodunda vektör çizilebilir öğeleri @drawable, Java kodunda ise Drawable olarak adlandırabilirsiniz.

    Örneğin, aşağıdaki düzen XML kodu, resmi bir görünüme uygular:

    <ImageView
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:src="@drawable/myimage" />

    Aşağıdaki kod, resmi Drawable olarak alır:

    Kotlin

    val drawable = resources.getDrawable(R.drawable.myimage, theme)

    Java

    Resources res = getResources();
    Drawable drawable = res.getDrawable(R.drawable.myimage, getTheme());

    getResources() yöntemi, etkinlikler, parçalar, düzenler, görünümler vb. gibi kullanıcı arayüzü nesneleri için geçerli olan Context sınıfında bulunur.

  • Uygulamanızda AndroidX kullanılıyorsa (build.gradle dosyanızda vectorDrawables.useSupportLibrary = true ifadesi olmasa bile) app:srcCompat ifadesi içeren bir drawable vektör öğesine de başvurabilirsiniz. Örneğin:

    <ImageView
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      app:srcCompat="@drawable/myimage" />
  • Bazen, örneğin VectorDrawable sınıfının belirli özelliklerini kullanmanız gerektiğinde, drawable kaynağı tam sınıfına dönüştürmeniz gerekebilir. Bunun için aşağıdaki gibi bir kod kullanabilirsiniz:

    Kotlin

    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) {
      val vectorDrawable = drawable as VectorDrawable
    } else {
      val bitmapDrawable = drawable as BitmapDrawable
    }

    Java

    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) {
      VectorDrawable vectorDrawable = (VectorDrawable) drawable;
    } else {
      BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
    }

Drawable vektör kaynaklarına yalnızca ana iş parçacığından erişebilirsiniz.

Android 5.0 (API düzeyi 21) ve sonraki sürümlerde, AnimatedVectorDrawable sınıfının özelliklerini canlandırmak için VectorDrawable sınıfını kullanabilirsiniz. AndroidX ile Android 3.0 (API düzeyi 11) ve sonraki sürümlerde VectorDrawable sınıfını canlandırmak için AnimatedVectorDrawableCompat sınıfını kullanabilirsiniz. Daha fazla bilgi için Çizilebilir grafikleri animasyonlu hale getirme başlıklı makaleyi inceleyin.