Android grafik ve animasyon
Android, 2B grafik ve animasyonları desteklemek için çok zengin ve farklı bir çerçeve sağlar. Bu konu, bu çerçeveleri tanıtır ve Xamarin. Android uygulamasında kullanmak üzere özel grafik ve animasyonların nasıl oluşturulacağını açıklar.
Genel Bakış
Geleneksel olarak sınırlı güçte cihazlarda çalışmaya karşın, en yüksek dereceli mobil uygulamalar genellikle gelişmiş bir kullanıcı deneyimi (UX) sayesinde yüksek kaliteli grafiklerle ve kolay anlaşılır, hızlı ve dinamik bir fikir sağlayan animasyonlarla tamamlanmıştır. Mobil uygulamalar daha fazla ve daha gelişmiş bir şekilde gelişdiğinde, kullanıcılar uygulamalardan daha fazla ve daha fazlasını beklemiştir.
ABD için Luckily, modern mobil platformların kullanım kolaylığı sağlarken gelişmiş animasyonlar ve özel grafikler oluşturmak için çok güçlü çerçeveleri vardır. Bu, geliştiricilerin çok az çabayla zengin etkileşim eklemesini sağlar.
Android 'de UI API çerçeveleri kabaca iki kategoriye ayrılabilir: grafik ve animasyon.
Grafikler, 2B ve 3B grafikler yapmak için farklı yaklaşımlar halinde bölünür. 3B grafikler, OpenGL ES (OpenGL 'in Mobile özel sürümü) gibi çeşitli yerleşik çerçeveler ve MonoGame gibi üçüncü taraf çerçeveler (XNA Toolkit ile uyumlu bir platformlar arası araç seti) ile kullanılabilir. 3B grafikler Bu makalenin kapsamında olmasa da, yerleşik 2B çizim tekniklerini inceleyeceğiz.
Android, 2B grafik oluşturmak için iki farklı API sağlar. Bunlardan biri yüksek düzey bildirime dayalı bir yaklaşım ve diğer bir programlı düşük düzey API 'sidir:
Drawable kaynakları : Bunlar, XML dosyalarına çizim yönergeleri katıştırarak programlı bir şekilde veya (daha fazla) özel grafikler oluşturmak için kullanılır. Drawable kaynakları genellikle, Android 'in 2B bir grafiği işlemesini sağlayan yönergeler veya Eylemler içeren XML dosyaları olarak tanımlanır.
Tuval : Bu, doğrudan temel bir bit eşlem üzerinde çizim içeren bir alt düzey API 'dir. Görüntülendiklere çok ayrıntılı bir denetim sağlar.
Bu 2B grafik tekniklerine ek olarak, Android animasyon oluşturmanın birkaç farklı yolunu da sağlar:
Drawable animasyonları : Android Ayrıca, drawable animasyonuolarak bilinen Çerçeve çerçeve animasyonlarını da destekler. Bu en basit animasyon API 'sidir. Android ardışık olarak, drawable kaynaklarını sırayla yükler ve görüntüler (tıpkı bir çizgi açık gibi).
Animasyonları görüntüleme – animasyonları görüntüleme , ANDROID 'deki orijinal animasyon API 'sidir ve Android 'in tüm sürümlerinde kullanılabilir. Bu API, yalnızca görünüm nesneleriyle çalışacak ve yalnızca bu görünümlerde basit dönüştürmeler gerçekleştirebilen için sınırlıdır. Animasyonları görüntüleme, genellikle klasörde bulunan XML dosyalarında tanımlanmıştır
/Resources/anim.Özellik animasyonları – Android 3,0, yeni BIR animasyon API kümesi olarak bilinen özellik animasyonlarıolarak sunulmuştur. Bu yeni API, yalnızca görüntüleme nesnelerini değil, herhangi bir nesnenin özelliklerine animasyon uygulamak için kullanılabilecek genişletilebilir ve esnek bir sistem sunmuştur. Bu esneklik, animasyonların kod paylaşımını daha kolay hale getirmek için ayrı sınıflarda kapsüllenmesi sağlar.
Animasyonları görüntüleme, eski Android 3,0 API 'leri (API düzeyi 11) desteklemesi gereken uygulamalar için daha uygundur. Aksi takdirde, uygulamalar yukarıda belirtilen nedenlerden dolayı yeni özellik animasyon API 'leri kullanmalıdır.
Bu çerçevelerin hepsi önemli seçeneklerdir, ancak mümkün olduğunda, birlikte çalışmak üzere daha esnek bir API olduğu için, tercih Özellik animasyonlarına verilmelidir. Özellik animasyonları, animasyon mantığının kod paylaşımını kolaylaştıran ve kod bakımını kolaylaştıran ayrı sınıflarda kapsüllenmesi için izin verir.
Erişilebilirlik
Grafikler ve animasyonlar, Android uygulamalarının kullanımını çekici ve eğlenceli hale getirmenize yardımcı olur; Ancak, bazı etkileşimlerin ekran okuyucular, alternatif giriş cihazları veya yardımlı Yakınlaştırma aracılığıyla gerçekleşeceğini unutmamak önemlidir. Ayrıca, bazı etkileşimler ses özellikleri olmadan meydana gelebilir.
Uygulamalar göz önünde bulundurularak tasarlandıysa, bu durumlarda uygulamalar daha fazla kullanılabilir: Kullanıcı arabiriminde ipuçları ve gezinti yardımı sağlama ve Kullanıcı arabirimi için metin-içerik ya da açıklama olma.
Android 'in erişilebilirlik API 'Lerini kullanma hakkında daha fazla bilgi için Google 'ın erişilebilirlik Kılavuzu ' na bakın.
2B grafikler
Drawable kaynakları Android uygulamalarında popüler bir tekniktir. Diğer kaynaklarda olduğu gibi, drawable kaynakları bildirime göre yapılır. Bunlar, XML dosyalarında tanımlanmıştır. Bu yaklaşım, kaynaklardaki kodun temiz bir şekilde ayrılmasını sağlar. Bu, bir Android uygulamasındaki grafikleri güncelleştirmek veya değiştirmek üzere kod değiştirmek gerekli olmadığından geliştirme ve bakım işlemlerini kolaylaştırabilir. Ancak, drawable kaynakları birçok basit ve yaygın grafik gereksinimlerine göre yararlı olsa da, tuval API 'sinin gücü ve denetimi yoktur.
Tuval nesnesini kullanan diğer teknik, System. Drawing veya IOS 'ın temel çizimi gibi DIĞER geleneksel API çerçevelerine çok benzer. Tuval nesnesinin kullanılması, 2B grafiklerin nasıl oluşturulduğuna ilişkin en iyi denetimi sağlar. Bir drawable kaynağının çalışmamaları veya ile çalışmak zor olacağı durumlar için uygundur. Örneğin, görünümü kaydırıcının değeriyle ilgili hesaplamalara göre değiştirilecek özel bir kaydırıcı denetimi çizmek gerekebilir.
Önce drawable kaynaklarını incelim. Bunlar daha basittir ve en yaygın özel çizim durumlarını kapsar.
Drawable kaynakları
Drawable kaynakları, dizindeki bir XML dosyasında tanımlanmıştır /Resources/drawable . PNG veya JPEG 'yi gömmekten farklı olarak, drawable kaynaklarının yoğunluğuna özgü sürümlerini sağlamak gerekli değildir.
Çalışma zamanında, bir Android uygulaması bu kaynakları yükler ve 2B grafikler oluşturmak için bu XML dosyalarında yer alan yönergeleri kullanır.
Android birkaç farklı türde drawable kaynağı tanımlar:
Shapedrawable : Bu, temel bir geometrik şekil çizen ve bu şekle sınırlı bir grafik efekt kümesi uygulayan, drawable bir nesnedir. Bunlar, düğmeleri özelleştirme veya TextViews 'un arka planını ayarlama gibi şeyler için çok yararlıdır. Bu makalede daha sonra nasıl kullanılacağına ilişkin bir örnek görülecektir
ShapeDrawable.Statelistdrawable : Bu, bir pencere öğesinin/denetimin durumuna göre görünümü değiştirecek bir drawable kaynağıdır. Örneğin, bir düğme, basılan veya etmediğine bağlı olarak görünümünü değiştirebilir.
Layerdrawable : Bu drawable kaynağı, başka bir diğer drawables birini diğerinin üzerine yığacaktır. Aşağıdaki ekran görüntüsünde bir Layerdrawable örneği gösterilmektedir:

Geçişli olarak drawable : Bu bir layerdrawable , ancak bir farklılığı. Geçişli bir geçiş işlemi, bir katmanın yukarıya bir tanesi diğerinin animasyonunu yapabilir.
Levellistdrawable – bu durum, belirli koşullara göre bir görüntü görüntülemesi durumunda statelistdrawable ile oldukça benzerdir. Ancak, Statelistdrawable'ın aksine, levellistdrawable bir tamsayı değerine göre bir resim görüntüler. Bir bir WiFi sinyalinin gücünü göstermek, Levellistdrawable örneğine bir örnektir. WiFi sinyalinin gücü değiştiği için, görüntülenen çizilebilir buna göre değişir.
ScaledrawableClipdrawable – adından da anlaşılacağı gibi, bu drawables hem ölçeklendirme hem de kırpma işlevlerini sağlar. Scaledraw, başka bir drawable ile ölçeklenebilecektir, bu da Clipdraw, başka bir drawable 'ı kırpacaktır.
Insetdrawable – bu drawable, başka bir drawable kaynağının taraflarındaki ınsets 'ler uygular. Bir görünüm görünümün gerçek limitinden daha küçük bir arka plana ihtiyaç duyduğunda kullanılır.
XML Bitmapdrawable – bu dosya, gerçek bir bit eşlemde GERÇEKLEŞTIRILECEK olan XML 'de bir yönergeler kümesidir. Android 'in gerçekleştirebileceği bazı eylemler döşeme, titreme ve kenar yumuşatma ' dir. Bunun en yaygın kullanımlardan biri, bir bitmapi bir düzenin arka planında döşemaktır.
Drawable örneği
Kullanarak 2B grafik oluşturma hakkında hızlı bir örneğe bakalım ShapeDrawable . ShapeDrawable, Dört temel şekillerden birini tanımlayabilir: dikdörtgen, oval, çizgi ve halka. Gradyan, renk ve boyut gibi temel etkileri de uygulamak mümkündür. Aşağıdaki XML, ShapeDrawableShapeDrawable Yardımcısı projesinde (dosyasında Resources/drawable/shape_rounded_blue_rect.xml ) bulunabilir.
Mor gradyan arka planı ve yuvarlatılmış köşeler içeren bir dikdörtgen tanımlar:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<!-- Specify a gradient for the background -->
<gradient android:angle="45"
android:startColor="#55000066"
android:centerColor="#00000000"
android:endColor="#00000000"
android:centerX="0.75" />
<padding android:left="5dp"
android:right="5dp"
android:top="5dp"
android:bottom="5dp" />
<corners android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp" />
</shape>
Bu Drawresource kaynağına, aşağıdaki XML 'de gösterildiği gibi bir düzen veya başka bir drawable aracılığıyla başvurabilebiliriz:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#33000000">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/shape_rounded_blue_rect"
android:text="@string/message_shapedrawable" />
</RelativeLayout>
Ayrıca, drawable kaynakları programlı bir şekilde uygulanabilir. Aşağıdaki kod parçacığı, bir TextView 'un arka planını programlı bir şekilde nasıl ayarlayagösterdiğini gösterir:
TextView tv = FindViewById<TextView>(Resource.Id.shapeDrawableTextView);
tv.SetBackgroundResource(Resource.Drawable.shape_rounded_blue_rect);
Bunun nasıl görüneceğine bakmak için Animationsdemo projesini çalıştırın ve ana menüden şekil drawable öğesini seçin. Aşağıdaki ekran görüntüsüne benzer bir şey görmeniz gerekir:
XML öğeleri ve drawable kaynaklarının sözdizimi hakkında daha fazla bilgi için Google 'ın belgelerinebaşvurun.
Tuval çizim API 'sini kullanma
Drawables güçlü ancak sınırlamaları vardır. Bazı şeyler mümkün değildir veya çok karmaşık değildir (örneğin: cihazdaki bir kamera tarafından alınmış bir resme filtre uygulama). Bir drawable kaynağı kullanarak kırmızı gözle azaltma uygulamak çok zor olabilir. Bunun yerine, tuval API 'SI bir uygulamanın, resmin belirli bir bölümündeki renkleri seçmeli olarak değiştirmek için çok ayrıntılı denetime sahip olmasına izin verir.
tuval ile yaygın olarak kullanılan bir sınıf Paint sınıfıdır. Bu sınıf, nasıl çizildiği hakkında renk ve stil bilgilerini içerir. Renk ve saydamlık gibi şeyler sağlamak için kullanılır.
Tuval API 'SI, 2B grafik çizmek için, bir boyacısı modeli kullanır. İşlemler birbirini izleyen katmanlara uygulanır. Her işlem, temel alınan bit eşlemin bazı alanını kapsar. Alan, daha önce boyanmış bir alanla çakışırsa, yeni boya, eskisini kısmen veya tamamen gizlecektir. Bu, System. Drawing ve iOS 'ın çekirdek grafikleri gibi diğer birçok çizim API 'Leri ile aynı şekilde çalışır.
Bir nesnesi elde etmenin iki yolu vardır Canvas . İlk yöntem, bir bit eşlem nesnesi tanımlamayı ve sonra bir nesne örneğini oluşturmasını içerir . Örneğin, aşağıdaki kod parçacığı temel bir bit eşlem ile yeni bir tuval oluşturur:
Bitmap bitmap = Bitmap.CreateBitmap(100, 100, Bitmap.Config.Argb8888);
Canvas canvas = new Canvas(b);
Bir nesnesi elde etmenin diğer yolu, CanvasGörünüm temel sınıfı tarafından sunulan Canvas geri çağırma yöntemidir. Android, görünümün birlikte çalışması için bir görünümün kendisini çizmesi ve bir nesne arasında geçiş yapmaya karar verdiğinde bu yöntemi çağırır Canvas .
Tuval Sınıfı programlı olarak çizim yönergelerini sağlamak için yöntemler sunar. Örnek:
Canvas. DrawPaint – tüm tuvalin bit eşlemini belirtilen Paint ile doldurur.
Canvas. DrawPath : belirtilen Paint 'i kullanarak belirtilen geometrik şekli çizer.
Canvas. DrawText : tuvaldeki metni belirtilen renkle çizer. Metin, konumda çizilir
x,y.
Tuval API 'SI ile çizme
İşte tuval API 'sine bir örnek. Aşağıdaki kod parçacığı, bir görünümün nasıl çizileceğini göstermektedir:
public class MyView : View
{
protected override void OnDraw(Canvas canvas)
{
base.OnDraw(canvas);
Paint green = new Paint {
AntiAlias = true,
Color = Color.Rgb(0x99, 0xcc, 0),
};
green.SetStyle(Paint.Style.FillAndStroke);
Paint red = new Paint {
AntiAlias = true,
Color = Color.Rgb(0xff, 0x44, 0x44)
};
red.SetStyle(Paint.Style.FillAndStroke);
float middle = canvas.Width * 0.25f;
canvas.DrawPaint(red);
canvas.DrawRect(0, 0, middle, canvas.Height, green);
}
}
Yukarıdaki bu kod, kırmızı bir boya ve yeşil boyama nesnesi oluşturur. Tuvalin içeriğini kırmızı ile doldurur ve sonra tuvalde tuvalin genişliğinin %25 ' i kadar yeşil bir dikdörtgen çizmesini söyler. Bu makaleye bir örnek, AnimationsDemo Bu makaleye ait kaynak koda eklenen projede tarafından görülebilir. Uygulamayı başlatıp ana menüden çizim öğesini seçerek aşağıdakine benzer bir ekran olması gerekir:
Animasyon
Kullanıcılar, uygulamalarında hareket eden şeyler gibi. Animasyonlar, bir uygulamanın kullanıcı deneyimini geliştirmek ve kullanıma sunmak için harika bir yoldur. En iyi animasyonlar, kullanıcıların doğal hissettikleri için fark ettikleri değerlerdir. Android, animasyonlar için aşağıdaki üç API 'YI sağlar:
Animasyonu görüntüleme – bu, özgün API 'dir. Bu animasyonlar belirli bir görünüme bağlıdır ve görünümün içeriği üzerinde basit dönüşümler gerçekleştirebilir. Bu API, basitliği nedeniyle Alfa animasyonları, döndürmeler gibi şeyler için hala yararlıdır.
Özellik animasyonu – Android 3,0 ' de özellik animasyonları sunuldu. Uygulama neredeyse her şeye animasyon uygulamayı etkinleştirir. Özellik animasyonları, nesne ekranda görünür olmasa bile herhangi bir nesnenin herhangi bir özelliğini değiştirmek için kullanılabilir.
Drawable animasyon : Bu, düzenlere çok basit bir animasyon efekti uygulamak için kullanılan özel bir drawable kaynağıdır.
Genel olarak, özellik animasyonu daha esnek olduğu ve daha fazla özellik sunan tercih edilen sistemdir.
Animasyonları görüntüleme
Animasyonları görüntüleme, görünümlerle sınırlıdır ve yalnızca başlangıç ve bitiş noktaları, boyut, döndürme ve saydamlık gibi değerlerde animasyon gerçekleştirebilir. Bu tür animasyonlar genellikle Ara animasyonolarak adlandırılır. Animasyonları görüntüleme iki şekilde tanımlanır: programlama yoluyla kodda veya XML dosyaları kullanılarak. XML dosyaları daha okunaklı ve bakımını daha kolay olduğu için görünüm animasyonlarını bildirmek için tercih edilen yoldur.
Animasyon XML dosyaları /Resources/anim bir Xamarin. Android projesinin dizininde saklanacak. Bu dosya kök öğe olarak aşağıdaki öğelerden birine sahip olmalıdır:
alpha– Bir belirme veya Soldur animasyonu.rotate– Bir döndürme animasyonu.scale– Bir animasyon yeniden boyutlandırma.translate– Yatay ve/veya dikey hareket.set– Bir veya daha fazla animasyon öğelerinden birini tutabilecek bir kapsayıcı.
Varsayılan olarak, bir XML dosyasındaki tüm animasyonlar eşzamanlı olarak uygulanır. Animasyonların sırayla gerçekleşmesini sağlamak için, android:startOffset yukarıda tanımlanan öğelerden birindeki özniteliği ayarlayın.
Bir animasyondaki değişiklik oranını bir enterpolayakullanarak etkilemek mümkündür. Enterpolalatör, Animasyon efektlerinin hızlandırılır, tekrarlanması veya yavaşlamasına olanak tanır. Android Framework, (ancak bunlarla sınırlı olmamak üzere) birkaç farklı şekilde kullanıma sunulmuştur:
AccelerateInterpolator/DecelerateInterpolator– Bu enterpolasyon, bir animasyondaki değişiklik oranını artırır veya azaltır.BounceInterpolator– değişiklik son sırada sıçrayın.LinearInterpolator– değişiklik hızı sabittir.
Aşağıdaki XML, bu öğelerin bazılarını birleştiren bir animasyon dosyası örneğini gösterir:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android=http://schemas.android.com/apk/res/android
android:shareInterpolator="false">
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="1.4"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:fillEnabled="true"
android:fillAfter="false"
android:duration="700" />
<set android:interpolator="@android:anim/accelerate_interpolator">
<scale android:fromXScale="1.4"
android:toXScale="0.0"
android:fromYScale="0.6"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillEnabled="true"
android:fillBefore="false"
android:fillAfter="true"
android:startOffset="700"
android:duration="400" />
<rotate android:fromDegrees="0"
android:toDegrees="-45"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillEnabled="true"
android:fillBefore="false"
android:fillAfter="true"
android:startOffset="700"
android:duration="400" />
</set>
</set>
Bu animasyon tüm animasyonları eşzamanlı olarak gerçekleştirir. İlk ölçek animasyonu görüntüyü yatay olarak genişletecektir ve dikey olarak daraltabilir ve ekran aynı anda 45 derece sayaç saat yönünde, küçülerek ekranda görünür.
Animasyon, animasyonu seçerek ve bir görünüme uygulayarak bir görünüme program aracılığıyla uygulanabilir. Android Android.Views.Animations.AnimationUtils bir animasyon kaynağını alacak ve bir örneği döndürecek yardımcı sınıfı sağlar Android.Views.Animations.Animation . Bu nesne StartAnimation , nesne çağırarak ve geçirerek bir görünüme uygulanır Animation . Aşağıdaki kod parçacığında buna bir örnek gösterilmektedir:
Animation myAnimation = AnimationUtils.LoadAnimation(Resource.Animation.MyAnimation);
ImageView myImage = FindViewById<ImageView>(Resource.Id.imageView1);
myImage.StartAnimation(myAnimation);
Artık animasyonların nasıl çalıştığını anlamak için, özellik animasyonlarına geçiş yapmanızı sağlar.
Özellik animasyonları
Özellik canlandırıcılar, Android 3,0 ' de tanıtılan yeni bir API 'sidir. Bunlar herhangi bir nesne üzerinde herhangi bir özelliği hareketlendirmek için kullanılabilecek daha genişletilebilir bir API sağlar.
Tüm özellik animasyonları, Animator alt sınıfının örnekleri tarafından oluşturulur. Uygulamalar bu sınıfı, alt sınıflarından birini kullanmaları yerine doğrudan kullanmaz:
Valueanimator : Bu sınıf, tüm özellik animasyon API 'sindeki en önemli sınıftır. Değiştirilmesi gereken özelliklerin değerlerini hesaplar.
ViewAnimatorBu değerleri doğrudan güncelleştirmez; bunun yerine, animasyonlu nesneleri güncelleştirmek için kullanılabilecek olaylar oluşturur.Objectanimator – Bu sınıf öğesinin bir alt sınıfıdır . Güncelleştirilecek hedef nesne ve özellik kabul ederek nesneleri hareketlendirme işlemini basitleştirmek için tasarlanmıştır.
Animationset : Bu sınıf, animasyonların birbiriyle ilişkili olarak nasıl çalışacağını düzenleyen bir sorumluluktan sorumludur. Animasyonlar aynı anda, ardışık olarak veya aralarında belirtilen bir gecikmeyle çalıştırılabilir.
Değerlendiricileri , animasyon sırasında yeni değerleri hesaplamak için animators tarafından kullanılan özel sınıflardır. Android, aşağıdaki değerlendiricileri sağlar:
Intevaluator : tamsayı özelliklerine ilişkin değerleri hesaplar.
FloatEvaluator – float özellikleri için değerleri hesaplar.
Argbevaluator – renk özellikleri için değerleri hesaplar.
Hareketlendirilen özellik bir floatint veya renk değilse, uygulamalar arabirimini uygulayarak kendi değerlendirici oluşturabilir ITypeEvaluator . (Özel değerlendiricileri uygulamak bu konunun kapsamının dışındadır.)
ValueAnimator kullanma
Herhangi bir animasyonun iki bölümü vardır: animasyon değerlerini hesaplama ve sonra bu değerleri bazı nesneler üzerinde Özellikler üzerinde ayarlama. Valueanimator yalnızca değerleri hesaplar, ancak nesneler üzerinde doğrudan çalışmaz. Bunun yerine, nesneler animasyon ömrü boyunca çağrılacak olay işleyicileri içinde güncelleştirilir. Bu tasarım, bazı özelliklerin bir animasyon değerinden güncelleştirilmesini sağlar.
ValueAnimatorAşağıdaki fabrika yöntemlerinden birini çağırarak bir örneği elde edersiniz:
ValueAnimator.OfIntValueAnimator.OfFloatValueAnimator.OfObject
Bu işlem yapıldıktan sonra, ValueAnimator Örneğin süresi ayarlanmış olmalıdır ve ardından başlatılabilir. Aşağıdaki örnek, 1000 milisaniyelik aralığında 0 ' dan 1 ' e bir değerin nasıl hareketlendirileceğini gösterir:
ValueAnimator animator = ValueAnimator.OfInt(0, 100);
animator.SetDuration(1000);
animator.Start();
Ancak, yukarıdaki kod parçacığı çok yararlı değildir; Animator çalışır, ancak güncelleştirilmiş değer için bir hedef yoktur. AnimatorSınıfı, yeni bir değerin dinleyicilerini bilgilendirmek için gerekli olduğuna karar verdiğinde güncelleştirme olayını yükseltir. Uygulamalar, aşağıdaki kod parçacığında gösterildiği gibi, bu olaya yanıt veren bir olay işleyicisi sağlayabilir:
MyCustomObject myObj = new MyCustomObject();
myObj.SomeIntegerValue = -1;
animator.Update += (object sender, ValueAnimator.AnimatorUpdateEventArgs e) =>
{
int newValue = (int) e.Animation.AnimatedValue;
// Apply this new value to the object being animated.
myObj.SomeIntegerValue = newValue;
};
Daha da anlaşıldığına göre, ValueAnimator hakkında daha fazla bilgi edinebilirsiniz ObjectAnimator .
ObjectAnimator kullanma
Objectanimator , ValueAnimator olay işleyicilerini bağlamak için gereken mantığı ile zamanlama altyapısını ve değer hesaplamasını birleştiren öğesinin bir alt sınıfıdır. ValueAnimatorUygulamaların bir olay işleyicisini açık bir şekilde ele geçirmesine gerek duyuyor ObjectAnimator . Bu adımdan bizimle ilgili olacaktır.
İçin API, ObjectAnimator IÇIN API 'ye çok benzer ViewAnimator , ancak güncelleştirilecek özelliğin nesnesini ve adını sağlamanızı gerektirir. Aşağıdaki örnek, kullanımı için bir örnek göstermektedir ObjectAnimator :
MyCustomObject myObj = new MyCustomObject();
myObj.SomeIntegerValue = -1;
ObjectAnimator animator = ObjectAnimator.OfFloat(myObj, "SomeIntegerValue", 0, 100);
animator.SetDuration(1000);
animator.Start();
Önceki kod parçacığınızdan görebileceğiniz gibi, ObjectAnimator bir nesneye animasyon uygulamak için gereken kodu azaltabilir ve basitleştirebilir.
Çizilebilir Animasyonlar
Son animasyon API'si Drawable Animation API'dir. Çizilebilir animasyonlar, bir dizi Drawable kaynağı art arda yükser ve bir çevirme dizisine benzer şekilde sıralı olarak görüntüler.
Çizilebilir kaynaklar, kök öğe olarak bir öğeye ve animasyonda her kareyi tanımlayan bir dizi öğeye sahip bir XML <animation-list><item> dosyasında tanımlanır. Bu XML dosyası /Resource/drawable uygulamanın klasöründe depolanır. Aşağıdaki XML, çizilebilir bir animasyon örneğidir:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/asteroid01" android:duration="100" />
<item android:drawable="@drawable/asteroid02" android:duration="100" />
<item android:drawable="@drawable/asteroid03" android:duration="100" />
<item android:drawable="@drawable/asteroid04" android:duration="100" />
<item android:drawable="@drawable/asteroid05" android:duration="100" />
<item android:drawable="@drawable/asteroid06" android:duration="100" />
</animation-list>
Bu animasyon altı kareden geçerek çalıştıracak. özniteliği, android:duration her çerçevenin ne kadar süreyle görüntü olacağını belirtir. Sonraki kod parçacığında, kullanıcı ekranda bir düğmeye tıkladığında Drawable animasyonu oluşturma ve başlatma örneği gösterilir:
AnimationDrawable _asteroidDrawable;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
_asteroidDrawable = (Android.Graphics.Drawables.AnimationDrawable)
Resources.GetDrawable(Resource.Drawable.spinning_asteroid);
ImageView asteroidImage = FindViewById<ImageView>(Resource.Id.imageView2);
asteroidImage.SetImageDrawable((Android.Graphics.Drawables.Drawable) _asteroidDrawable);
Button asteroidButton = FindViewById<Button>(Resource.Id.spinAsteroid);
asteroidButton.Click += (sender, e) =>
{
_asteroidDrawable.Start();
};
}
Bu noktada, bir Android uygulamasında kullanılabilen animasyon API'lerinin temellerini ele aldık.
Özet
Bu makalede, bir Android uygulamasına grafik eklemeye yardımcı olmak için birçok yeni kavram ve API tanıtıldı. İlk olarak çeşitli 2D grafik API'lerini ele aldı ve Android'in tuval nesnesi kullanarak uygulamaların doğrudan ekrana nasıl çizmesini mümkün olduğunu gösterdi. Ayrıca XML dosyaları kullanılarak grafiklerin bildirimli olarak oluşturulmalarına olanak sağlayan bazı alternatif teknikler de gördük. Ardından Android'de animasyon oluşturmak için eski ve yeni API'leri tartışacağız.

