Android'de animasyonlu geçişlerin ayarlanması

Android uygulamalarda animasyonlu ekran geçişleri uygulamanızın daha cool gözükmesini sağlamaktadır. Ayrıca daha profesyonel bir arayüz imkanı da sunmaktadır. Bu amaçla aşağıda örneği verilen iki farklı Activity arasında gerçekleştirilen soldan - sağa ve sağdan sola ekran geçişlerinin nasıl gerçekleştirildiği ile alakalı bu yazımızı sizlerle paylaşıyoruz. Ekran geçişlerinde pozitif ve negatif yönde her iki geçişin ayarlanması gerekmektedir. Yani ekrana sağdan animasyonla gelen Activity veya Dialog un ekrandan ayrılırken tersine animasyonla çalıştırılması gerekmektedir.


Aşağıdaki kod parçacıkları ile sizlere Android uygulamada animasyonlu geçişlerin nasıl gerçekleştirildiğini detaylı şekilde anlatacağız. Aşağıdaki dosyalar res dizini altında anim klasörü oluşturularak içerisine kopyalanmalıdır.

slide_to_left.xml
Ekran geçişini sola doğru gerçekleştirmede kullanılan animasyon kodu
<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-100%p"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="@integer/slide_animation_duration"/>
</set>	
slide_to_right.xml
Ekran geçişini sağa doğru gerçekleştirmede kullanılan animasyon kodu
<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="100%p"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="@integer/slide_animation_duration"/>
</set>
slide_from_left.xml
Soldan ekrana geçişte kullanılan animasyon kodu
<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="@integer/slide_animation_duration"/>
</set>
slide_from_right.xml
Sağdan ekrana geçişte kullanılan animasyon kodu
<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="@integer/slide_animation_duration"/>
</set>
integers.xml
Animasyon süresini ayarlamada kullanılan integers.xml verisi aşağıdaki şekilde ayarlanmaktadır.
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="slide_animation_duration">300</integer>
</resources>
slide_animation_duration verisinin integers.xml üzerinden tanımlanıp diğer tüm animasyon dosyalarında kullanılması, animasyonlar arasındaki tutarlılığı korumaya yardımcı olur ve hepsinin aynı hızda hareket etmesini sağlar.

1. Activityler arası animasyonlu geçiş: 
Yeni activitylerin çağrılmasında startActivity() veya startActivityForResult() komutları kullanılmaktadır. Activity nin animasyonlu gerçekleştirilmesinde overridePendingTransition() komutu kullanılmaktadır.
Intent intent = new Intent(this, IkinciActivity.class); 
startActivity(intent); 
overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left);

Geri butonuna basıldığında ise onBackPressed() fonksiyonu içerisinde overridePendingTransition() metodu tersi yönde hareket edecek şekilde ayarlanmalıdır.
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right);
}

2. Viewler arası animasyonlu geçiş: 
Viewler arasında animasyonlu geçiş için  startAnimation() metodu kullanılmaktadır.
view.startAnimation(AnimationUtils.loadAnimation( 
    context, R.anim.slide_to_right 
));

comments powered by Disqus