禁用从纵向到横向的默认动画

Jor*_*los 42 android android-animation android-layout

我有一个带有几个"正常"活动的应用程序,可以在横向或纵向上运行.它们专为肖像而设计.

这个应用程序有一个单独的活动,使用相机,并锁定在景观.我通过将图像和文本旋转90度来模拟'此活动是在肖像上,所以它看起来像其他活动.

在某些设备上,例如Samsung Galaxy Tab 7和Galaxy S3,从正常的纵向活动到相机横向活动并返回时,会显示旋转动画.这对用户来说很困惑,因为景观活动模拟了肖像.

有没有办法删除这个旋转动画?理想情况下,我想更改为默认的纵向到纵向动画,但只是删除旋转动画就足够了.

我试过了

overridePendingTransition(0, 0);
Run Code Online (Sandbox Code Playgroud)

该方法的其他变体没有成功.

[添加]

根据@igalarzab,@ Georg和@Joe的建议,我做到了这一点(仍然没有运气):

  • 向Manifest添加了android:configChanges ="orientation | screenSize"
  • 添加了onConfigurationChanged
  • 创建了一个虚拟动画,它什么都不做,并添加了overridePendingTransition(R.anim.nothing,R.anim.nothing);

我有这些结果:

  • 仅在旋转相同的活动时调用onConfigurationChanged(纵向上的活动A - 横向上的活动A).但是从纵向上的活动A - >景观上的活动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

hac*_*bod 26

抱歉,无法控制旋转动画.这是在您的应用程序之外完成的,在窗口管理器的深处,它获取当前屏幕的屏幕截图,调整大小并重建其背后的UI,然后运行内置动画以从原始屏幕截图转换为新的重建UI.屏幕旋转更改时无法修改此行为.

  • @hackbod本机相机应用程序处理方向配置更改并进行布局更改,但它没有任何延迟或显示旋转动画.该应用程序如何实现这一目标? (14认同)
  • 我认为这个答案现在已经过时了 (4认同)

mar*_*ant 18

这是相机应用程序禁用旋转动画的方式:

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

注意:根据下面的API参考和评论,这只适用于:

  • 在API级别18或以上
  • FLAG_FULLSCREEN标志被设置为WindowManager.LayoutParams活动的
  • 另一个窗口不包含活动(例如,长按电源按钮触发的电源关闭弹出窗口)