Intereting Posts
Как прикоснуться к EditTextPrefences из другой активности или другого потока Unity UI Masking не работает на Galaxy Note и Kindle Fire Android WallpaperManager crop изображения NullPointerException в SearchView с помощью AppCompat в Android 5.0 Есть ли более быстрый способ декодирования символов html для строки, чем Html.fromHtml ()? Связывание STL с автономным исполняемым файлом NDK для Android Как я могу определить Android-телефоны и Android-планшеты по-разному, используя заголовок агента пользователя? Скомпилированный dalvik не загружает разделяемые библиотеки Загружать активность и / или логотип приложения программно из манифеста Android – Забыл пароль хранилища ключей. Могу ли я дешифровать файл хранилища ключей? Как вызвать функцию с обратными вызовами в Java, как я делаю это на C #? Менеджер местоположений Android, получить местоположение GPS, если нет GPS, затем перейдите в местоположение поставщика сети Как мы можем получить уведомление, если у телефона есть доступ в Интернет? Как получить дополнительные намерения, если активность «singleTask»? Как разрешить пользователю использовать loadConnectedPlayers

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

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

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

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

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

я пробовал

overridePendingTransition(0, 0); 

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

[Добавлено]

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

  • Добавлен андроид: configChanges = "ориентация | 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); Удалены нормальные переходы (портрет-> портретный и ландшафтный), но он не удалил анимацию вращения (портрет-> пейзаж и наоборот).

[ВИДЕО]

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

Solutions Collecting From Web of "Отключить анимацию по умолчанию от Portrait to Landscape"

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

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

 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 активности
  • Действие не распространяется на другое окно (например, всплывающее окно «Выключение», вызванное длительным нажатием кнопки «Питание»)

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

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

Я поместил это в 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); } 

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

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

Попробуйте определить анимацию «ничего не делать» и вызовите 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 для тестирования с 🙂

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

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

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

  <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> 

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

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