禁用默认的动画,从纵向到横向(Disable default animation from Port

2019-06-17 18:06发布

我有它可以在横向或纵向运行几个“正常”活动的应用程序。 它们的设计和大多肖像使用。

这个程序有一个使用的摄像头,并锁定在景观一个单一的活动。 我模拟“本次活动是由纵向旋转图像和文字90度,所以它看起来像活动的其余部分。

在某些装置中,如三星银河标签7和Galaxy S3, 从正常的活动肖像将相机景观活性和背面时,示出了旋转动画 。 这对用户造成混淆,因为景观的活动是模拟画像上。

有没有办法消除这种旋转动画 ? 理想情况下,我想改变默认的纵向肖像动画,只是删除旋转动画就足够了。

我试过了

overridePendingTransition(0, 0);

没有成功该方法的其它变型。

[添加]

继@igalarzab建议,@Georg和@Joe,我已经做到了这一点(仍没有运气):

  • 将机器人:configChanges =“方向|屏幕尺寸”的体现
  • 新增onConfigurationChanged
  • 创建一个虚拟的动画,其不执行任何操作,并添加overridePendingTransition(R.anim.nothing,R.anim.nothing);

我有以下结果:

  • onConfigurationChanged旋转相同的活性只有当被调用(在纵向活动A - >上景观活性A)。 但是,从活动A的肖像去时,它不叫 - 景观>活动B
  • 这防止活动旋转时被重新启动时,但它并没有除去旋转动画(银河S3,银河NEXUS,银河标签7.0和银河标签10.1测试)
  • overridePendingTransition(R.anim.nothing,R.anim.nothing); 除去正常的转换(纵向状态>纵向和landscape->景观),但它并没有删除旋转动画(纵向状态>景观,反之亦然)。

[视频]

我上传,显示动画我想禁用的视频。 这种情况从相机的活动(锁定到横向),以其他活动改变,而在肖像拿着手机的时候:

http://youtu.be/T79Q1P_5_Ck

Answer 1:

暂时没有办法控制的旋转动画。 这是道外您的应用程序的完成,深在需要将当前屏幕的截图,调整大小,并重建它背后的UI,然后在窗口管理器运行内置的动画从原始截图过渡到新的重建UI。 有没有办法当屏幕旋转而改变修改此行为。



Answer 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活动的
  • 该活动不被另一个窗口覆盖(例如,通过长按电源按钮触发关机弹出)


Answer 3:

您可以在AndroidManifest设置一个叫做属性android:configChanges在那里你可以决定要在代码来管理这些变化。 通过这种方式,旋转变化的动画将被禁用,您可以处理它,你的方法想onConfigurationChanged您的Activity

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


Answer 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);

    }

更多细节在这里 。



Answer 5:

您可能已经尝试过这一点,但以防万一:

尝试定义一个“什么都不做”的动画,并调用overridePendingTransition()其ID。 也许是这样的:

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

对不起,我没有一个银河设备来测试:)



Answer 6:

您可以在AndroidManifest设置一个名为Android的特性:configChanges在那里你可以决定要在代码来管理这些变化。 通过这种方式,旋转变化的动画将被禁用,您可以处理它,你在你的onConfigurationChanged活动的方法希望。

这应该工作,但根据这个网页 ,你也应该加入的Android添加到屏幕大小configChanges:configChanges =“方向|屏幕尺寸”到你的活动代码。



Answer 7:

如果您想设置在纵向模式下你的活动只有你可以在你这样的清单文件做

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


Answer 8:

对他们谁不说我说是的,它是可能的,这是很简单的! 的第一件事听起来愚蠢的,但锁定您的应用程序所需的方向! 然后不断地问什么方位设备具有最后但并非最不重要旋转或动画的意见向新的方向陀螺仪!

编辑:你可能想隐藏的系统UI,因为它不会转动。 马里奥



文章来源: Disable default animation from Portrait to Landscape