Подтвердить что ты не робот

Отключить анимацию по умолчанию от Portrait to Landscape

У меня есть приложение с несколькими "нормальными" действиями, которые могут работать как по ландшафту, так и по портрету. Они предназначены для и в основном используются на портрете.

В этом приложении есть одно действие, которое использует камеру и заблокировано на фоне. Я "имитирую" эту деятельность на портрете, поворачивая изображения и тексты на 90 градусов, поэтому он выглядит как остальные действия.

На некоторых устройствах, таких как Samsung Galaxy Tab 7 и Galaxy S3, анимация вращения отображается при переходе от обычной портретной активности к активности пейзажа камеры и назад. Это запутывает пользователя, потому что ландшафтная активность имитируется на портрете.

Есть ли способ удалить эту анимацию вращения? В идеале я бы хотел изменить портретную анимацию по умолчанию, но просто удалить анимацию вращения было бы достаточно.

Я пробовал

overridePendingTransition(0, 0);

другие варианты этого метода без успеха.

[ADDED]

Следуя советам @igalarzab, @Georg и @Joe, я сделал это (все еще не повезло):

  • Добавлен андроид: configChanges = "orientation | screenSize" для манифеста
  • Добавлено onConfigurationChanged
  • Создал фиктивную анимацию, которая ничего не делает и добавила overridePendingTransition (R.anim.nothing, R.anim.nothing);

У меня были следующие результаты:

  • onConfigurationChanged вызывается только при вращении одной и той же активности (активность A на портрете → активность A на ландшафте). Но он не вызывается при переходе из Activity A на портрете → Activity B в альбомной ориентации
  • Это предотвратило перезапуск Activity при вращении, но не удалило анимацию вращения (проверено на Galaxy S3, Galaxy Nexus, Galaxy Tab 7.0 и Galaxy Tab 10.1).
  • overridePendingTransition (R.anim.nothing, R.anim.nothing); удалены нормальные переходы (портретный, портретный и ландшафтный), но он не удалил анимацию вращения (портрет- > пейзаж и наоборот).

[ВИДЕО]

Я загрузил видео, которое показывает анимацию, которую я хочу отключить. Это происходит, когда вы переключаетесь с активности камеры (заблокирован на пейзаж) на другую активность, удерживая телефон на портрете:

http://youtu.be/T79Q1P_5_Ck

4b9b3361

Ответ 1

Извините, нет возможности управлять анимацией вращения. Это делается вне вашего приложения, в глубине оконного менеджера, где требуется скриншот текущего экрана, изменяет размер и перестраивает интерфейс пользователя за ним, а затем запускает встроенную анимацию для перехода от исходного скриншота к новому перестроенному UI. Невозможно изменить это поведение при изменении поворота экрана.

Ответ 2

Это способ, которым приложение камеры для камеры отключает анимацию вращения:

private void setRotationAnimation() {
    int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    winParams.rotationAnimation = rotationAnimation;
    win.setAttributes(winParams);
}

Примечание. В соответствии с Ссылка на API и комментарий ниже, это работает только:

  • На уровне API 18 или выше
  • Флаг FLAG_FULLSCREEN установлен для WindowManager.LayoutParams Activity
  • Активность не распространяется на другое окно (например, всплывающее окно Power Off, вызванное длительным нажатием кнопки питания)

Ответ 3

Вы можете установить в AndroidManifest свойство с именем android:configChanges, где вы можете решить, какие изменения вы хотите управлять в коде. Таким образом, анимация смены поворота будет отключена, и вы сможете обрабатывать ее, как вы хотите, в методе onConfigurationChanged вашего Activity.

<activity
    android:name=".MySuperClass"
    android:label="@string/read_qrcode"
    android:screenOrientation="portrait"
    android:configChanges="orientation" />

Ответ 4

Я поместил это в mainActivity и отменил анимацию вращения:

@Override
    public void setRequestedOrientation(int requestedOrientation) {
        super.setRequestedOrientation(requestedOrientation);

        int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
        Window win = getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        winParams.rotationAnimation = rotationAnimation;
        win.setAttributes(winParams);

    }

Подробнее здесь.

Ответ 5

Возможно, вы уже пробовали это, но на всякий случай:

Попробуйте определить анимацию "ничего не делать" и вызовите overridePendingTransition() с ее идентификатором. Может быть, что-то вроде:

    <set xmlns:android="http://schemas.android.com/apk/res/android" 
         android:fillAfter="true">
        <translate
            android:fromXDelta="0"
            android:toXDelta="0"
            android:duration="100" />
    </set>

Извините, у меня не было устройства Galaxy для тестирования:)

Ответ 6

Если вы хотите настроить свои действия в портретном режиме, вы можете сделать это в вашем файле манифеста, как это показано

 <activity
     android:name=".Qosko4Activity"
     android:label="@string/app_name"
     android:screenOrientation="portrait" >
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity>

Ответ 7

Вы можете установить в AndroidManifest свойство, называемое android: configChanges, где вы можете решить, какие изменения вы хотите управлять в коде. Таким образом, анимация изменения поворота будет отключено, и вы можете обрабатывать его так, как хотите в методе onConfigurationChanged вашей деятельности.

Это должно работать, но согласно этой странице вы также должны добавить screenSize в configChanges, добавив android: configChanges = "orientation | screenSize" в ваш тег активности.

Ответ 8

Против них, которые сказали "нет", я говорю "да", это возможно, и это очень просто! Первое, что может показаться глупым, но заблокировать ваше приложение к желаемой ориентации! Затем продолжайте задавать гирометру, какая ориентация устройства имеет последнее, но не менее важное значение: поворачивать или анимировать ваши взгляды на новую ориентацию!

Изменить: вы можете скрыть систему ui, так как она не будет вращаться. Марио