禁用旋转屏幕上的效果android

时间:2015-01-30 15:50:18

标签: android

我正在创建一个相机应用。

当手机旋转时,我会看到屏幕旋转的默认android动画。 在相机应用程序中,这个动画看起来不太好。

如何以编程方式禁用它?

4 个答案:

答案 0 :(得分:1)

由于Api等级18,你可以这样做:

final WindowManager.LayoutParams lp = activity.getWindow()
                .getAttributes();
lp.rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;

请参阅WindowManager.LayoutParams documentation

答案 1 :(得分:0)

根据this答案(来自Android Framework工程师),屏幕旋转动画工作超出了应用程序的范围。

所以,不,似乎没有办法禁用它。

答案 2 :(得分:0)

您应该将屏幕方向强制为纵向(或横向)并使用加速度计处理旋转。我想这是显示相机预览而不重新创建曲面和其他UI hickup的唯一方法。至少这是默认相机应用程序处理旋转的方式。

然后,您可以将自定义旋转动画添加到图标,重新布局UI等

答案 3 :(得分:0)

成功检查:Java - Android 9 (Pie) - Android Studio 4.1.3 - Huawei P10

六个月来我无法解决这个需求。问题出在代码中未分配的标志“FLAG_FULLSCREEN”中。

第一步 MainActivity.java:

 public class MainActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /* getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN); */ // If the animation still is, try applying it.
    setRotationAnimation(); 
  }

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

  public void Button (View view) {
    // Connected to android:onClick="Button" in XML.
    Intent intent = new Intent(MainActivity.this, MainActivity2.class);
    startActivity(intent);
  }
}

下一步 MainActivity2.java:

public class MainActivity2 {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main2);

    /* getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN); */ // If the animation still is, try applying it.
     setRotationAnimation(); 
   }

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

   public void Button (View view) {
     Intent intent = new Intent(MainActivity2.this, MainActivity.class);
     startActivity(intent);
   }
 }

下一步styles.xml:

 <resources>
   <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
      <item name="android:windowFullscreen">true</item>
   </style>
 </resources>

我理解的简单事情:在运行activity2之前,您必须首先在任何地方启动“setRotationAnimation()”。启动activity2时,您必须在其中运行“setRotationAnimation()”。工作不正常。