Yanıtlar:
Bunu ile yapabilirsiniz Activity.overridePendingTransition()
. Bir XML kaynak dosyasında basit geçiş animasyonları tanımlayabilirsiniz.
onCreate
işlevinde yapabilirsiniz.
İşte iki Faaliyet arasında hoş bir yumuşak solma kodu ..
Adlı bir dosya oluşturun fadein.xml
içinderes/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
Adlı bir dosya oluşturun fadeout.xml
içinderes/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
Eğer kaybolur istiyorsanız Aktivite A için Aktivite B , içinde aşağıdaki koymak onCreate()
için yöntemiyle Etkinliği B . Önce setContentView()
benim için çalışıyor.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Solmalar sizin için çok yavaşsa, android:duration
yukarıdaki xml dosyalarında daha küçük bir şeye geçin.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
Bu dosyaları görüntülemek, size özel animasyonlarınızı nasıl geliştirebileceğinizle ilgili ipuçları verebilir (örneğin, solmaya daha uzun süre dayanarak).
fadein
ve fadeout
hiç fade_in
ve fade_out
. Dan J'nin gönderisinden
overridePendingTransition()
aradıktan hemen sonra finish()
ve / veya aramalısınız startActivity()
. Yeni Etkinliği başlattıktan hemen sonra bu şekilde güzel bir solma elde edebildim.
Bunu yapmanın daha kolay bir yolu:
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
Bu kadar :)
Evet. İşletim sistemine aktiviteniz için ne tür bir geçiş yapmak istediğinizi söyleyebilirsiniz.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
ANIMATION, işletim sisteminde yerleşik bir animasyonu ifade eden bir tamsayıdır.
res> oluştur> fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
res> oluştur> anim> fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
Res> değerler> styles.xml içinde
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
OnCreate () etkinliklerinde
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Varsayılan animasyonların listesi için bkz. Http://developer.android.com/reference/android/R.anim.html
Aslında fade_in
ve fade_out
API seviye 1 ve üstü için vardır.
Varsayılan etkinlik animasyonumun üzerine yazıyorum. Api 15'te sorunsuz çalıştığını test ediyorum. İşte kullandığım çözüm:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
Res klasörü altında anim klasörü oluşturun ve ardından bu dört animasyon dosyasını oluşturun:
slide_in_right.xml
<?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:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?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:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?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:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?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:duration="@android:integer/config_mediumAnimTime"/>
</set>
Örnek projemi indirebilirsiniz .
Bu kadar... :)
İşte iki aktivite arasında güzel bir pürüzsüz yapmak için kod.
soldan sağa yumuşak etki
Res / anim'de slide_in_right.xml ve slide_out_right.xml adlı bir dosya oluşturun
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
sağdan sola yumuşak etki
Res / anim'de animation_enter.xml ve animation_leave.xml adlı bir dosya oluşturun
animation_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="-100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700"/>
</set>
animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
Bir aktiviteden ikinci Aktiviteye git
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
startActivity(intent_next);
finish();
4.Onay tuşuna basın veya İkinci aktiviteden bir Aktiviteye gidin
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
startActivity(home_intent);
finish();
overridePendingTransition
hemen sonra startActivity: developer.android.com/reference/android/app/...
Android 1.5'te overridePendingTransition'ı kullanamazsınız. overridePendingTransistion Android 2.0'a geldi.
Eğer herhangi bir hatayla karşılaşmayacaksanız, sıradan animasyonları (veya siz) kullanarak hedefi (1.5 veya üstü) derlemeniz veya overridePendingTransistion kullanarak hedefi (2.0 veya üstü) derlemeniz gerekir.
Özet: Android 1.5'te overridePendingTransistion'ı kullanamazsınız .
Yine de işletim sistemindeki yerleşik animasyonları kullanabilirsiniz.
GALAXY IN Cihazlar:
Ayarlar> Geliştirici Seçenekleri'ni kullanarak cihazda kapatmadığınızdan emin olmanız gerekir:
ActivityCompat.startActivity () işlevini kullanın API> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Android'in bazı sürümleri özel Activity
geçişleri destekler, bazıları desteklemez (eski cihazlar). Özel geçişleri kullanmak istiyorsanız bunu kontrol etmek için iyi bir uygulamadır Activity
vardır overridePendingTransition()
öyle değil eski sürümlerinde olduğu gibi, yöntem.
Yöntemin var olup olmadığını bilmek için yansıma API'sı kullanılabilir. Varsa yöntemi kontrol edip döndürecek olan basit kod şöyledir:
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
Ve sonra, kendi geçişimizi uygulayabiliriz, yani varsa bu yöntemi kullanabiliriz:
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Burada örnek olarak geçiş gösterimi için basit solma ve solma animasyonları kullanılmıştır.
yakınlaştırma animasyonu
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
zoom_enter
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
zoom_exit
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
overridePendingTransition
ilgili cevaplar için geçerlidir:(0, 0)
Hiç animasyon istemiyorsanız geçebilirsiniz .