Intereting Posts
Android Studio Project говорит, что проект уже включен в GitHub, несмотря на то, что я удалил репозиторий. EditText указывает на видимость при переходе Appcelerator Vs. MonoTouch – Какой из них лучше всего подходит для .NET-разработчика? Как изменить размер изображения (битмап) до заданного размера? Как прокручивать веб-просмотр по горизонтали внутри ViewPager? Каков наилучший способ получения / использования контекста внутри AsyncTask? Фотосъемка на Android от приложения Delphi Firemonkey XE5 Как заставить приложение Android генерировать случайное число? Мне нужно расширить FirebaseInstanceIdService, чтобы подписаться на темы FCM? Можно ли использовать WebSockets или аналогичные с родным Android-приложением? Мерцание экрана OpenGL ES 2.0 Какая пропускная способность обеспечивает NFC? Android: как отлаживать интерфейс Никаких определений для устройств Kindle Fire, доступных в Android SDK Manager Выровнять текст вокруг вертикали центра ImageSpan

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

[ВИДЕО]

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

Извините, что управлять анимацией вращения невозможно. Это делается вне вашего приложения, в глубине оконного менеджера, где требуется скриншот текущего экрана, изменяет размер и перестраивает интерфейс пользователя за ним, а затем запускает встроенную анимацию для перехода от исходного скриншота к новому перестроенному 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, так как она не будет вращаться. Марио