#4 – Animasyon: Android te Animasyon Sınıfı ve Kullanımı, Resim Boyutunu Değiştirme ve Resmi Döndürme


Merhaba, bu yazımda Android’teki animasyon sınıfını anlatacak ve uygulamalı örneklerle, resimlerle destekleyip konuyu daha iyi anlatmaya ve sizin de daha iyi anlamanıza yardımcı olacağım.

[wpdm_file id=12]

Animasyon(Animation) sınıfı android.view.animation paketi altında bulunur. Bunu yine şu şekilde kontrol edebilirsiniz: Eclipse te oluşturduğunuz herhangi bir projenin dosyalarında Android‘in bir sürümü vardır. Bu sürümün altında android.jar adlı dosyayı göreceksiniz. Buna tıklayıp altındaki paketlerden söylediğim paketi bulup Animation.class dosyasını görebilirsiniz.

animation_class_android

Animasyon Kaynakları (Animation Resources)

Android teki animasyon kaynakları iki türdür. Bunlar:

1. Özellik Animasyonu (Propery Animation)
2. Görüntü Animasyonu (View Animation)

Özellik Animasyonu (Propery Animation)

Adından da anlaşılacağı üzere ; burada bir nesnenin özelliklerini değiştirerek animasyon oluşturuyoruz. Burda Animator lar kullanılır. Sonraki derslerim anlatacağım bu animasyon türünü.

Görüntü Animasyonu (View Animation)

Bu türde ise bir nesnenin (genellikle resim) görüntüsüne ait özellikleri değiştirerek animasyon oluşturuyoruz. Örnekle daha iyi anlayacaksınız, sabırlı olun. :)

Uygulama Örneğimiz: Örneğimizde bir buton ve bir imageview nesnesi olacak. Kullanıcı butona dokunduğu zaman gösterilen resim aynı anda  hem büyüyecek hem de dönücek. Evet başlayalım.

Gerekli Adımlar:  

1. Yeni bir proje oluşturun. İlk derste anlatmıştım, tekrar bakmak isterseniz.

2. /res klasörüne sağ tıklayıp sırasıyla  New -> Folder seçeneklerine tıklayıp anim adında yeni bir dosya oluşturun.  Bu dosya animasyon için gerekli kaynakları içerecek.

3. Oluşturduğumuz anim klasörüne sağ tıklayıp şunları takip edin: New -> Android XML File, yeni bir xml dosyası oluşturun. Ve içine şu kodları girin:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"

    android:fillAfter="true"
    android:interpolator="@android:anim/linear_interpolator" >

  <scale
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="4000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="4"
        android:toYScale="4" >
    </scale>

    <rotate
        android:duration="500"
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="infinite"

        />

</set>

<Set>
Bu bir container animasyon elementlerini tutmak taşımak için. (<sclae>, <rotate> ve diğerleri).

<scale>
Bu bir animasyon nesnesinin ölçeğini(boyutunu) temsil eder.

adroid:duration
Bu animasyon süresini belirttiğimiz parametredir.

android:fromXScale
Animasyonun başlayacağı x boyutu  offset değeri. Biz 1 olarak kullandık bu değişmeyecek demektir.

android:fromYScale
Animasyonun başlayacağı x boyutu  offset değeri. Biz 1 olarak kullandık bu değişmeyecek demektir.

android:pivotX
X koordinatını sabitleme. (%50 demekle nesne scale edilse bile x koordinatı değişmez.)

android:pivotY
Y koordinatını sabitleme. (%50 demekle nesne scale edilse bile y koordinatı değişmez.)

<rotate>
Bir animasyonun dönmesini temsil eder.

android:formDegrees
Nesnenin hangi dereceden başlayarak dönmesini istiyorsak bu parametreyi kullanarak belirtiyoruz.

androdi:toDegrees
Nesnenin hangi dereceye kadar dönmesini istiyorsak bu parametreyi kullanarak belirtiyoruz.

4. main.xml dosyasına şu kodları girin.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"

    >

    <ImageView android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/androidd"
        android:layout_centerInParent="true"
        />

    <Button android:id="@+id/btnStart"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="Döndür ve Büyüt"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"/>
</RelativeLayout>

5. MainActivity.java dosyanıza aşağıdaki kodları girin.

package com.androidhocam.animation;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Animation.AnimationListener;
import android.widget.Button;
import android.widget.ImageView;public class MainActivity extends Activity implements AnimationListener {

ImageView imageview;
Button donbuyut;

Animation Animasyonumuz;

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageview = (ImageView) findViewById(R.id.imageview);
donbuyut = (Button) findViewById(R.id.btnStart);

Animasyonumuz = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.together);

Animasyonumuz.setAnimationListener(this);

donbuyut.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

imageview.startAnimation(Animasyonumuz);

}
});

}

@Override
public void onAnimationEnd(Animation animation) {
// Take any action after completing the animation

// check for zoom in animation
if (animation ==Animasyonumuz) {
}

}

@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub

}

}

6. Projemize sağ tıklayıp Run as -> Android Application diyoruz.

Emülatör Çıktısı: 


Android Evreni’nin bir yazısının daha sonuna geldik. :) Umarım bütün ziyaretçilerime yararı olur.

Yazıyı beğendiyseniz, beğen butonunu kullanarak ya da  yorum yaparak belirtebilirsiniz.
Sorularınız veya yardıma ihtiyacınız varsa, yorum bırakınız. 

Şunlar da ilginizi çekebilir

17 yorum

  • Muhammet
    15 Ekim 2013 at 19:03

    Çok teşekkürler bu işime baya yarıyıcak kodlar kısmını bi şekilde hallediyorum ama ön plan cok sade kalıyo bunun gibi uygulamalara bakarak kendi projemi zenginleştirebilirim :)

    • Admin
      15 Ekim 2013 at 20:20

      yorum bırakarak beğeninizi ilettiğiniz için teşekkürler, derslerin devamı gelecek AndroidEvreni‘ni takip etmeye devam edin. :)

  • cavus
    30 Ekim 2013 at 23:03

    gerçekten guzel tesekkurler

  • Hdemirörs
    8 Ocak 2014 at 16:04

    android:startOffset=” ” ile hareketin ne zaman başlanacağı ayarlanıyor ancak bitmesi için hangi kodu kullanmam gerekir?

  • Hdemirörs
    8 Ocak 2014 at 16:07

    Grid view içine sayı yerine resim nasıl koyabiliriz…

    • Admin
      8 Ocak 2014 at 19:21

      merhaba, grid view ile bir galeri uygulaması örneği hazır kod bölümümüzde bulunmaktadır. Buradan indirip kodları inceleyebilirsiniz: Hazır Kod İndir Kolay gelsin. :)

      • Hdemirörs
        9 Ocak 2014 at 10:44

        teşşekkür ederim

  • hilal
    18 Ocak 2014 at 13:03

    elinize saglık hocam :) bitmap kullanımı ile de bir döküman hazırlama ihtimaliniz varmı ?

  • hilal
    18 Ocak 2014 at 20:50

    merhaba animasyon=AnimationUtils.loadAnimation(getApplicationContext(),R.anim.together) şu komut da together dedigimiz şey naptıysam çıkmıyo bende bi fikriniz varmı acaba ?

    • SelTur
      20 Kasım 2014 at 16:13

      Hocam together anim klasörünüze kaydettiğiniz animasyon xml dosyanızın adı olacak.

  • ufuk
    19 Ocak 2014 at 11:49

    çok güzel çalışma tebrikler

  • Yusuf
    7 Ekim 2014 at 22:25

    tebrikler ve teşekkürler… :) başarılarınınzın devamı dileğiyle :)

    • MUSTAFA DEMİR
      11 Kasım 2014 at 13:20

      merhaba Yusuf bey,

      düşüncelerinizi bize ilettiğiniz için çok teşekkürler.

      İyi Çalışmalar.

  • SelTur
    20 Kasım 2014 at 16:17

    Mustafa BEy çalışmalarınızı çok beğenerek takip ediyor ve kodlarınızı da büyük bir zevkle tekrarlıyorum. Buradaki örnekte
    public void onAnimationStart(Animation animation) {
    // Take any action after completing the animation

    // check for zoom in animation
    if (animation ==Animasyonumuz) {
    }
    }
    kalıbı olmadığı için başlangıç satırımız hata veriyor.

    Bir de sizden ricam veritabanı işlemlerimizi web tabanlı olarak yapabileceğimiz bir örnek vermeniz. Şöyle ki apk uygulamamızdaki bilgileri webdeki bir veritabanımımızda tutmak istiyoruz. Bunu nasıl yapabilriiz?

    • MUSTAFA DEMİR
      14 Aralık 2014 at 09:05

      merhaba, kusura bakmayın bir süredir blogumla ilgilenemiyorum. Yaşadığınız problem ile alakalı olarak:
      Animasyon örneğinizde aktiviteniz ‘AnimationListener’ sınıfını implement ediyor mu?
      2. sorunuz(datayı webden çekmek) için bir ders hazırlayıp yayınayacaktım ama ileride düşünüyordum önemli ve gerekli bir konu. Ama madem şimdiden böyle bir istek oldu yakın zamanda yayınlayacağım.

      İyi Çalışmalar.

  • galip atasoy
    21 Kasım 2014 at 00:58

    Harikasın

Admin için bir cevap yazın Cevabı iptal et