禁用Android应用中的所有动画

时间:2015-11-25 18:52:45

标签: android android-animation android-transitions

我想禁用在我的Android应用中启动新活动时发生的所有动画(适用于所有活动)。有没有办法一劳永逸地实现这一目标?或者我应该去每个活动并使用Intent.FLAG_ACTIVITY_NO_ANIMATION或overridePendingTransition或两者兼而有之?

1 个答案:

答案 0 :(得分:2)

如果您愿意,可以使用样式:

String location = "/abc/def/ghfj/ijk/lmn.doc";

Path p = Paths.get(location);
String parent = p.getName(1).getFileName().toString();

System.out.println(parent);// Output: def

并根据您的活动设置它们:

<style name="noAnimTheme" parent="android:Theme">
   <item name="android:windowAnimationStyle">@null</item>
</style>

如果那就是你的意思,请告诉我......

归功于@Santosh https://stackoverflow.com/a/9312957/3180983

当我构建我的应用程序时,我只使用了一个活动。在活动上有4个自定义视图。每个自定义视图代表另一个“活动”,它不是真正的活动......我正在玩几个自定义视图,所以每个都是另一个窗口......

以下是带动画的代码(***如果您不希望动画将此代码跳到下面的 <activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme"> </activity> 下方。):

goToRegistrationPage()

这是没有动画的代码(这就是你需要的):

//This code change the view so that the register form will appear. instead of changing activity with animation.
public void goToRegistrationPage()
    {
        Animation animationRightX1 = AnimationUtils.loadAnimation(this, R.anim.translate_right_x1);
        //animationRightX1.
        Animation animationRightX2 = AnimationUtils.loadAnimation(this, R.anim.translate_right_x2);
        Animation animationRightX3 = AnimationUtils.loadAnimation(this, R.anim.translate_right_x3);

        final int width = this.getWindowManager().getDefaultDisplay().getWidth();
        layout.MainView.setVisibility(View.GONE);
        layout.MainLogin.startAnimation(animationRightX1);
        layout.MainRegister.startAnimation(animationRightX1);
        animationRightX1.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }
            @Override
            public void onAnimationEnd(Animation animation) {
                layout.layoutScroll.scrollTo((width*2), 0);
                layout.MainView.setVisibility(View.VISIBLE);
            }
            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }

所以基本上你在这里做的是滚动宽度为像素的窗口。

//This code change the view so that the register form will appear. instead of changing activity //Go to the registration form from the main view. public void goToRegistrationPageFromMainView() { final int width = this.getWindowManager().getDefaultDisplay().getWidth(); layout.layoutScroll.scrollTo((width*2), 0); // its width*2 because there is the "some other view" so it need to go 2 times width to the right side... } 是图片中的粉红色。

layoutscroll是我创建的用于存储所有布局的类...您可以执行的个人偏好layout

How it looks like

  • 主视图,其他视图和注册表单是自定义视图,可以扩展linearlayout ...您可以使用线性布局inflater附加到每个XML文件...
    • 有关滚动视图不可滚动的问题....