overridePendingTransition не работает

Я пытаюсь реализовать переход в моем приложении, но overridePendingTransition (anim, anim) работает неправильно.

  • у меня включены переходы окна
  • после отладки кода, я могу сказать, что компилятор выполняет вызов, но он не отображается
  • Я попытался вызвать finish() перед overridePendingTransition () это, похоже, не имеет никакого эффекта

мой код прост и стандарт:

запуск намерения и вызов overridePendingTransition:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
finish();

начальная анимация не должна ничего делать, только анимация затухания должна иметь эффект.

slide_no_move XML-код:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0%p" android:toYDelta="0%p"
android:duration="500"/>

fade XML:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
 android:fillAfter="true">
 <alpha android:fromAlpha="1.0" 
        android:toAlpha="0.0"
        android:duration="500"/>
</set>

EDIT: я забыл упомянуть тот факт, что деятельность, которую я начала все расширения "основной" деятельности. Может быть, это и есть причина проблемы?

9 ответов


попробуйте вызвать pendingTransition после вызова finish(), например:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
finish();
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);

Если вы активируете режим отладки usb, он может отключить эффекты переходов. Введите параметры разработчика (где вы активировали режим отладки), найдите раздел пользовательского интерфейса, проверьте, отключена ли анимация в шкале перехода анимации. Если да ,установите его.5x. Готово!


попробуйте использовать этот :

    public class More2013Activity extends Activity{
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          overridePendingTransition(R.anim. slide_no_move, R.anim.fade_in);
          setContentView(R.layout.more_activity)
      }
    }

вместо вашего кода.


Если вы используете версию android >= 21, то сделайте android: windowActivityTransitions до true на стиль.в XML на значения-v21 следующим образом.

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

       <item name="android:windowActivityTransitions">true</item>

   </style>

перейти в настройках разработчика устройства, есть еще три варианта windows animation scale, Масштаб анимации перехода и масштаб продолжительности анимации. Убедитесь, что не все выключены. Это одна из причин, по которой я наткнулся.


Я знаю, это старый пост, но я его видел и чувствовал себя обязанным ответить на него:

Это была очень странная проблема, и это было связано устройства. В то время я использовал iOcean X7. Позже я узнал, что этот телефон не смог воспроизвести анимацию. Для некоторых он не играл анимации на любом приложении.


из 6.0 используйте этот метод для переопределения пользовательской анимации

ActivityOptions options = ActivityOptions.makeCustomAnimation(context,R.anim.slide_from_right, R.anim.slide_to_left);
Intent intent = new Intent(context, WhichActivityToOpen.class);
context.startActivity(intent, options.toBundle());

Вероятно, вы используете overridePendingTransition (anim, anim) в своем onPause () метод слишком. У меня была такая же проблема, но я решил ее с помощью крошечного трюка.

1: Определите логическое значение в своем классе до onCreate () метод

private boolean trans=true;

@Override
protected void onCreate(Bundle savedInstanceState) {...

2:Поставить trans = false; когда вы используете startActivity

Intent newsIntent = newIntent(ZPFActivity.this,More2013Activity.class);         
 trans = false;        
 startActivity(newsIntent);        
 overridePendingTransition(R.anim.slide_no_move, R.anim.fade);

3:и в onPause () способ сделать это

@Override
protected void onPause() {
    if (trans) {
        overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
    }
    super.onPause();
}

4:и в вашем onResume() способ сделать это

@Override
protected void onResume() {
    super.onResume();
    trans=true;
}

пожалуйста, проверьте ваше устройство в режим экономии энергии. в режиме энергосбережения анимация не будет работать.