Aracılığıyla paylaş


içindeki resimler Xamarin.Forms

Görüntüler ile Xamarin.Formsplatformlar arasında paylaşılabilir, her platform için özel olarak yüklenebilir veya görüntülenmek üzere indirilebilir.

Görüntüler, uygulama gezintisi, kullanılabilirlik ve markalamanın önemli bir parçasıdır. Xamarin.Forms uygulamaların tüm platformlarda görüntü paylaşabilmesi, ancak aynı zamanda her platformda farklı görüntüler görüntüleyebilmesi gerekir.

Simgeler ve giriş ekranları için platforma özgü görüntüler de gereklidir; bunların platform bazında yapılandırılması gerekir.

Görüntüleri görüntüleme

Xamarin.FormsImage bir sayfadaki görüntüleri görüntülemek için görünümü kullanır. Birkaç önemli özelliği vardır:

  • SourceImageSource- Görüntüyü görüntülenecek şekilde ayarlayan Dosya, Uri veya Kaynak örneği.
  • Aspect - Resmin içinde görüntülendiği sınırlar içinde (esnetme, kırpma veya mektup kutusu) nasıl boyutlandırılır?

ImageSource örnekler, her görüntü kaynağı türü için statik yöntemler kullanılarak elde edilebilir:

  • FromFile - Her platformda çözümlenebilen bir dosya adı veya dosya yolu gerektirir.
  • FromUri - Uri nesnesi gerektirir, örneğin. new Uri("http://server.com/image.jpg") .
  • FromResource- Derleme Eylemi:EmbeddedResource ile uygulama veya .NET Standart kitaplık projesine eklenmiş bir görüntü dosyasına kaynak tanımlayıcısı gerektirir.
  • FromStream - Görüntü verilerini sağlayan bir akış gerektirir.

Aspect özelliği, görüntünün görüntü alanına sığacak şekilde nasıl ölçeklendirileceğini belirler:

  • Fill - Görüntüyü tamamen ve tam olarak ekran alanını dolduracak şekilde uzatır. Bu, görüntünün bozulmasına neden olabilir.
  • AspectFill - Görüntüyü, görüntüyü korurken ekran alanını dolduracak şekilde (yani bozulma olmayacak şekilde) klipsler.
  • AspectFit - Resmin tamamının görüntü alanına sığması için resmi (gerekirse) letterbox'lar; resmin geniş mi yoksa uzun mu olduğuna bağlı olarak üst/alt veya yanlara boş alan eklenir.

Görüntüler yerel bir dosyadan, eklenmiş bir kaynaktan yüklenebilir, indirilebilir veya bir akıştan yüklenebilir. Ayrıca, yazı tipi simgeleri bir nesnedeki Image yazı tipi simgesi verileri FontImageSource belirtilerek görünüm tarafından görüntülenebilir. Daha fazla bilgi için Yazı Tipleri kılavuzunda Yazı tipi simgelerini görüntüleme bölümüne bakın.

Yerel görüntüler

Görüntü dosyaları her uygulama projesine eklenebilir ve paylaşılan koddan Xamarin.Forms başvurulabilir. Farklı platformlarda farklı çözünürlüklerin veya aralarında küçük farklar bulunan tasarımların kullanılması gibi platforma özgü görüntüler söz konusu olduğunda bu görüntü dağıtma yönteminin kullanılması gerekir.

Tüm uygulamalarda tek bir görüntü kullanmak için, her platformda aynı dosya adı kullanılmalıdır ve geçerli bir Android kaynak adı olmalıdır (örneğin, yalnızca küçük harfler, sayılar, alt çizgi ve nokta izin verilir).

  • iOS - iOS 9'dan bu yana görüntüleri yönetmenin ve desteklemenin tercih edilen yolu, bir uygulamanın çeşitli cihazlarını ve ölçek faktörlerini desteklemek için gereken tüm görüntü sürümlerini içermesi gereken Varlık Kataloğu Görüntü Kümelerini kullanmaktır. Daha fazla bilgi için bkz . Varlık Kataloğu Görüntü Kümesine Görüntü Ekleme.
  • Android - Derleme Eylemi: AndroidResource ile görüntüleri Resources/drawable dizinine yerleştirin. Görüntünün yüksek ve düşük DPI sürümleri de sağlanabilir (drawable-ldpi, drawable-hdpi ve drawable-xhdpi gibi uygun adlandırılmış Kaynaklar alt dizinlerinde).
  • Evrensel Windows Platformu (UWP) - Varsayılan olarak, görüntülerin Derleme Eylemi: İçerik ile uygulamanın kök dizinine yerleştirilmesi gerekir. Alternatif olarak, görüntüler daha sonra platforma özgü bir dizinle belirtilen farklı bir dizine yerleştirilebilir. Daha fazla bilgi için bkz . Windows'ta varsayılan görüntü dizini.

Önemli

iOS 9'un öncesinde görüntüler genellikle Derleme Eylemi: BundleResource ile Kaynaklar klasörüne yerleştirilirdi. Ancak, bir iOS uygulamasında resimlerle çalışma yöntemi Apple tarafından kullanım dışı bırakılmıştır. Daha fazla bilgi için bkz . Görüntü Boyutları ve Dosya Adları.

Dosya adlandırma ve yerleştirme için bu kurallara uymak, aşağıdaki XAML'nin görüntüyü tüm platformlarda yüklemesine ve görüntülemesine olanak tanır:

<Image Source="waterfront.jpg" />

Eşdeğer C# kodu aşağıdaki gibidir:

var image = new Image { Source = "waterfront.jpg" };

Aşağıdaki ekran görüntüleri, her platformda yerel görüntü görüntülemenin sonucunu gösterir:

Yerel görüntü görüntüleyen örnek uygulama

Daha fazla esneklik Device.RuntimePlatform için özelliği, bu kod örneğinde gösterildiği gibi bazı veya tüm platformlar için farklı bir görüntü dosyası veya yol seçmek için kullanılabilir:

image.Source = Device.RuntimePlatform == Device.Android
                ? ImageSource.FromFile("waterfront.jpg")
                : ImageSource.FromFile("Images/waterfront.jpg");

Önemli

Tüm platformlarda aynı görüntü dosya adını kullanmak için adın tüm platformlarda geçerli olması gerekir. Android çizilebilir öğelerinin adlandırma kısıtlamaları vardır; yalnızca küçük harflere, sayılara, alt çizgiye ve döneme izin verilir ve platformlar arası uyumluluk için diğer tüm platformlarda da buna uyulmalıdır. Örnek dosya adı waterfront.png kurallara uyar, ancak geçersiz dosya adlarına örnek olarak "su front.png", "WaterFront.png", "water-front.png" ve "wåterfront.png" verilebilir.

Yerel çözünürlükler (retina ve yüksek DPI)

iOS, Android ve UWP, işletim sisteminin cihazın özelliklerine göre çalışma zamanında uygun görüntüyü seçtiği farklı görüntü çözünürlükleri için destek içerir. Xamarin.Forms yerel görüntüleri yüklemek için yerel platformların API'lerini kullanır, bu nedenle dosyalar doğru şekilde adlandırılır ve projede bulunursa alternatif çözünürlükleri otomatik olarak destekler.

iOS 9'dan bu yana görüntüleri yönetmenin tercih edilen yolu, gereken her çözünürlük için görüntüleri uygun varlık kataloğu görüntü kümesine sürüklemektir. Daha fazla bilgi için bkz . Varlık Kataloğu Görüntü Kümesine Görüntü Ekleme.

iOS 9'den önce, görüntünün retina sürümleri Kaynaklar klasörüne yerleştirilebilir- dosya uzantısından önce dosya adında @2x veya @3x sonekleri olan çözünürlüğün iki ve üç katı (örn. myimage@2x.png). Ancak, bir iOS uygulamasında resimlerle çalışma yöntemi Apple tarafından kullanım dışı bırakılmıştır. Daha fazla bilgi için bkz . Görüntü Boyutları ve Dosya Adları.

Android alternatif çözünürlük görüntüleri, aşağıdaki ekran görüntüsünde gösterildiği gibi Android projesinde özel olarak adlandırılmış dizinlere yerleştirilmelidir:

Android birden çok çözünürlüklü görüntü konumu

UWP görüntü dosyası adları, dosya uzantısından önce son eklenebilir.scale-xxx; buradaxxx, varlığa uygulanan ölçeklendirme yüzdesidir( örneğin myimage.scale-200.png). Daha sonra kod veya XAML'de ölçek değiştiricisi olmadan görüntülere başvurulabilir; örneğin yalnızca myimage.png. Platform, ekranın geçerli DPI'sine göre en yakın uygun varlık ölçeğini seçer.

Görüntüleri görüntüleyen ek denetimler

Bazı denetimlerin görüntü görüntüleyen özellikleri vardır, örneğin:

  • Button üzerinde görüntülenecek bir bit eşlem görüntüsüne ayarlanabilen bir ImageSource özelliği vardır Button. Daha fazla bilgi için bkz . Bit eşlemleri düğmelerle kullanma.

  • ImageButton içinde görüntülenecek görüntüye ayarlanabilen bir Source özelliği vardır ImageButton. Daha fazla bilgi için bkz . Görüntü kaynağını ayarlama.

  • ToolbarItem bir IconImageSource dosyadan, eklenmiş kaynaktan, URI'den veya akıştan yüklenen bir görüntüye ayarlanabilen bir özelliğe sahiptir.

  • ImageCell bir ImageSource dosyadan, ekli kaynaktan, URI'den veya akıştan alınan bir görüntüye ayarlanabilen bir özelliğe sahiptir.

  • Page. dosyasından Page türetilen herhangi bir sayfa türü, dosya, eklenmiş kaynak, URI veya akış atanabilen ve özelliklerine sahiptir IconImageSourceBackgroundImageSource . Belirli koşullar altında, örneğin bir öğesinin ContentPagegörüntülendiği durumlardaNavigationPage, platform tarafından destekleniyorsa simge görüntülenir.

    Önemli

    iOS'ta özellik, Page.IconImageSource varlık kataloğu görüntü kümesindeki bir görüntüden doldurulamaz. Bunun yerine, bir dosyadan, eklenmiş kaynaktan, URI'den veya akıştan özelliği için Page.IconImageSource simge görüntülerini yükleyin.

Ekli görüntüler

Ekli görüntüler de bir uygulamayla (yerel görüntüler gibi) gönderilir, ancak her uygulamanın dosya yapısında görüntünün bir kopyasına sahip olmak yerine görüntü dosyası derlemeye kaynak olarak eklenir. Bu görüntü dağıtma yöntemi, her platformda aynı görüntüler kullanıldığında önerilir ve görüntü kodla birlikte paketlendiğinden bileşenler oluşturmaya özellikle uygundur.

Projeye resim eklemek için sağ tıklayarak yeni öğeler ekleyin ve eklemek istediğiniz resmi/resimleri seçin. Varsayılan olarak görüntüde Derleme Eylemi: Yok olur; bunun Derleme Eylemi: EmbeddedResource olarak ayarlanması gerekir.

Derleme eylemini ekli kaynağa ayarlama

Derleme Eylemi, bir dosyanın Özellikler penceresinde görüntülenebilir ve değiştirilebilir.

Bu örnekte kaynak kimliği WorkingWithImages.beach.jpg. IDE, her değer arasında bir nokta (.) kullanarak bu projenin Varsayılan Ad Alanını dosya adıyla birleştirerek bu varsayılan değeri oluşturmdur.

Ekli görüntüleri projenizdeki klasörlere yerleştirirseniz, klasör adları da kaynak kimliğindeki noktalarla (.) ayrılır. beach.jpg görüntüsünün MyImages adlı bir klasöre taşınması, WorkingWithImages.MyImages.beach.jpg kaynak kimliğine neden olur

Ekli görüntü yükleme kodu, aşağıda gösterildiği gibi Kaynak Kimliğini yöntemine ImageSource.FromResource geçirir:

Image embeddedImage = new Image
{
    Source = ImageSource.FromResource("WorkingWithImages.beach.jpg", typeof(MyClass).GetTypeInfo().Assembly)
};

Not

ekli görüntülerin Evrensel Windows Platformu yayın modunda görüntülenmesini desteklemek için, görüntünün arandığı kaynak derlemeyi belirten aşırı yüklemesinin ImageSource.FromResource kullanılması gerekir.

Şu anda kaynak tanımlayıcıları için örtük dönüştürme yoktur. Bunun yerine, eklenmiş görüntüleri yüklemek için veya new ResourceImageSource() kullanmanız ImageSource.FromResource gerekir.

Aşağıdaki ekran görüntüleri, her platformda eklenmiş bir görüntü görüntülemenin sonucunu gösterir:

Ekli görüntü görüntüleyen örnek uygulama

XAML

için stringResourceImageSourceyerleşik tür dönüştürücü olmadığından, bu tür görüntüler XAML tarafından yerel olarak yüklenemez. Bunun yerine, XAML'de belirtilen bir Kaynak Kimliği kullanılarak görüntüleri yüklemek için basit bir özel XAML işaretleme uzantısı yazılabilir:

[ContentProperty (nameof(Source))]
public class ImageResourceExtension : IMarkupExtension
{
 public string Source { get; set; }

 public object ProvideValue (IServiceProvider serviceProvider)
 {
   if (Source == null)
   {
     return null;
   }

   // Do your translation lookup here, using whatever method you require
   var imageSource = ImageSource.FromResource(Source, typeof(ImageResourceExtension).GetTypeInfo().Assembly);

   return imageSource;
 }
}

Not

ekli görüntülerin Evrensel Windows Platformu yayın modunda görüntülenmesini desteklemek için, görüntünün arandığı kaynak derlemeyi belirten aşırı yüklemesinin ImageSource.FromResource kullanılması gerekir.

Bu uzantıyı kullanmak için, proje için doğru ad alanını ve derleme değerlerini kullanarak XAML'ye bir özel xmlns ekleyin. Daha sonra görüntü kaynağı şu söz dizimi kullanılarak ayarlanabilir: {local:ImageResource WorkingWithImages.beach.jpg}. Aşağıda eksiksiz bir XAML örneği gösterilmiştir:

<?xml version="1.0" encoding="UTF-8" ?>
<ContentPage
   xmlns="http://xamarin.com/schemas/2014/forms"
   xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
   xmlns:local="clr-namespace:WorkingWithImages;assembly=WorkingWithImages"
   x:Class="WorkingWithImages.EmbeddedImagesXaml">
 <StackLayout VerticalOptions="Center" HorizontalOptions="Center">
   <!-- use a custom Markup Extension -->
   <Image Source="{local:ImageResource WorkingWithImages.beach.jpg}" />
 </StackLayout>
</ContentPage>

Ekli görüntülerle ilgili sorunları giderme

Kod hatalarını ayıklama

Belirli bir görüntü kaynağının neden yüklenmemiş olduğunu anlamak bazen zor olduğundan, kaynakların doğru yapılandırıldığını onaylamaya yardımcı olmak için aşağıdaki hata ayıklama kodu bir uygulamaya geçici olarak eklenebilir. Kaynak yükleme sorunlarının hatalarını ayıklamaya yardımcı olmak için verilen derlemeye eklenmiş tüm bilinen kaynakların Konsola çıkışını alır.

using System.Reflection;
// ...
// NOTE: use for debugging, not in released app code!
var assembly = typeof(MyClass).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
{
    System.Diagnostics.Debug.WriteLine("found resource: " + res);
}

Diğer projelere eklenmiş görüntüler

Varsayılan olarak, ImageSource.FromResource yöntemi yalnızca yöntemini çağıran ImageSource.FromResource kodla aynı derlemedeki görüntüleri arar. Yukarıdaki hata ayıklama kodunu kullanarak, deyimini her derlemede olduğu bilinen bir olarak değiştirerek typeof() hangi derlemelerin belirli bir Type kaynak içerdiğini belirleyebilirsiniz.

Ancak, ekli görüntü için aranmakta olan kaynak derleme yöntemine ImageSource.FromResource bağımsız değişken olarak belirtilebilir:

var imageSource = ImageSource.FromResource("filename.png",
            typeof(MyClass).GetTypeInfo().Assembly);

Görüntüleri indirme

Görüntüler, aşağıdaki XAML'de gösterildiği gibi görüntülenmek üzere otomatik olarak indirilebilir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       x:Class="WorkingWithImages.DownloadImagesXaml">
  <StackLayout VerticalOptions="Center" HorizontalOptions="Center">
    <Label Text="Image UriSource Xaml" />
    <Image Source="https://aka.ms/campus.jpg" />
    <Label Text="campus.jpg gets downloaded from microsoft.com" />
  </StackLayout>
</ContentPage>

Eşdeğer C# kodu aşağıdaki gibidir:

var webImage = new Image {
     Source = ImageSource.FromUri(
        new Uri("https://aka.ms/campus.jpg")
     ) };

ImageSource.FromUri yöntemi bir Uri nesne gerektirir ve öğesinden Uriokuyan yeni UriImageSource bir döndürür.

URI dizeleri için örtük dönüştürme de vardır, bu nedenle aşağıdaki örnek de çalışır:

webImage.Source = "https://aka.ms/campus.jpg";

Aşağıdaki ekran görüntüleri, her platformda uzak görüntü görüntülemenin sonucunu gösterir:

İndirilen görüntüyü görüntüleyen örnek uygulama

İndirilen görüntü önbelleğe alma

ayrıca UriImageSource , aşağıdaki özelliklerle yapılandırılan indirilen görüntülerin önbelleğe alınmasını da destekler:

  • CachingEnabled - Önbelleğe alma özelliğinin etkinleştirilip etkinleştirilmediği (true varsayılan olarak).
  • CacheValidityTimeSpan- Görüntünün ne kadar süreyle yerel olarak depolanacağını tanımlayan bir.

Önbelleğe Alma varsayılan olarak etkindir ve görüntüyü 24 saat boyunca yerel olarak depolar. Belirli bir görüntüde önbelleğe almayı devre dışı bırakmak için görüntü kaynağını aşağıdaki gibi oluşturun:

image.Source = new UriImageSource { CachingEnabled = false, Uri = new Uri("https://server.com/image") };

Belirli bir önbellek süresini (örneğin, 5 gün) ayarlamak için görüntü kaynağını aşağıdaki gibi oluşturun:

webImage.Source = new UriImageSource
{
    Uri = new Uri("https://aka.ms/campus.jpg"),
    CachingEnabled = true,
    CacheValidity = new TimeSpan(5,0,0,0)
};

Yerleşik önbelleğe alma, resim listelerini kaydırma gibi senaryoları desteklemeyi çok kolaylaştırır. Burada her hücrede bir görüntü ayarlayabilir (veya bağlayabilirsiniz) ve hücre yeniden görünüme kaydırıldığında görüntüyü yeniden yükleme işlemini yerleşik önbelleğin gerçekleştirmesine izin verebilirim.

Animasyonlu GIF'ler

Xamarin.Forms küçük, animasyonlu GIF'leri görüntüleme desteği içerir. Bu, özelliği animasyonlu gif dosyası olarak ayarlanarak Image.Source gerçekleştirilir:

<Image Source="demo.gif" />

Önemli

içindeki Xamarin.Forms animasyonlu GIF desteği dosyaları indirme özelliğini içerir ancak animasyonlu GIF'lerin önbelleğe alınmasını veya akışını desteklemez.

Varsayılan olarak, animasyonlu GIF yüklendiğinde oynatılmaz. Bunun nedeni, animasyonlu GIF'in IsAnimationPlaying yürütüldüğünü veya durdurulduğunu denetleen özelliğinin varsayılan değerine sahip olmasıdır false. türünde boololan bu özellik bir nesne tarafından desteklenir; başka bir BindableProperty deyişle, bir veri bağlamasının hedefi olabilir ve stillendirilir.

Bu nedenle, animasyonlu GIF yüklendiğinde özelliği olarak ayarlanana IsAnimationPlayingtruekadar oynatılmaz. Ardından özelliği falseolarak ayarlanarak IsAnimationPlaying kayıttan yürütme durdurulabilir. BU özelliğin GIF olmayan bir görüntü kaynağı görüntülerken hiçbir etkisi olmadığını unutmayın.

Not

Android'de animasyonlu GIF desteği, uygulamanızın hızlı işleyiciler kullanmasını gerektirir ve eski işleyicileri kullanmayı seçtiyseniz çalışmaz. UWP'de animasyonlu GIF desteği, Windows 10 Yıldönümü Güncelleştirmesi'nin (sürüm 1607) en düşük sürümünü gerektirir.

Simgeler ve giriş ekranları

Görünümle Image ilgili olmasa da, uygulama simgeleri ve giriş ekranları da projelerdeki Xamarin.Forms görüntülerin önemli bir kullanımıdır.

Uygulamalar için Xamarin.Forms simgeleri ve giriş ekranlarını ayarlama işlemi, uygulama projelerinin her birinde gerçekleştirilir. Bu, iOS, Android ve UWP için doğru boyutlandırılmış görüntüler oluşturmak anlamına gelir. Bu görüntüler her platformun gereksinimlerine göre adlandırılmalı ve bulunmalıdır.

Simgeler

Bu uygulama kaynaklarını oluşturma hakkında daha fazla bilgi için iOS Resimlerle Çalışma, Google Iconography ve kutucuk ve simge varlıkları için UWP Yönergeleri'ne bakın.

Ayrıca, yazı tipi simgeleri bir nesnedeki Image yazı tipi simgesi verileri FontImageSource belirtilerek görünüm tarafından görüntülenebilir. Daha fazla bilgi için Yazı Tipleri kılavuzunda Yazı tipi simgelerini görüntüleme bölümüne bakın.

Giriş ekranları

Yalnızca iOS ve UWP uygulamaları giriş ekranı gerektirir (başlangıç ekranı veya varsayılan görüntü olarak da adlandırılır).

Windows Geliştirme Merkezi Resimler ve Giriş ekranlarıyla çalışma iOS belgelerine bakın.