安卓中自定义活动转换动画

3

我的应用程序目前的流程是 Activity A -> Activity B -> Fragment B。我正在尝试实现 Activity 过渡动画。我已经阅读了许多在 SO 上提到使用 overridependingtransition() 的帖子,并且我已经几乎实现了这些帖子中提到的所有内容。但是,动画不起作用。

我需要在 Android 2.2(即 sdkversion 8)上运行此代码:

以下是代码:

Activity A 
oncreate method

Intent detailIntent = new Intent(this, WordDetailActivity.class);
            detailIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            detailIntent.putExtra(DbAdapter.KEY_ROWID, id);
                startActivity(detailIntent);
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);


 @Override
    protected void onPause() {
        super.onPause();
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }


Activity B

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    }

希望有人能够提供其他方法来在Android 2.2中实现活动转换。

1
只是想知道你是否知道在手机设置中禁用动画的手机将不会显示活动转换动画...所以不要指望它。 - roiberg
那就是问题所在。非常感谢!有没有办法通过我的应用程序更改设置,以便在每个手机上都可以看到动画。或者有其他方法来显示过渡动画吗? - ambit
@roiberg,请将您的评论添加为答案,因为它似乎解决了这个问题。 - talkol
4个回答

6

如果手机设置中禁用了动画,那么该手机将不会显示活动转换动画...因此不要指望它。

另外,您无法更改这些用户的设置。


2

将代码从onPause()移至onResume()

@Override
public void onResume() {
    super.onResume();
    overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}

尝试使用`minSdk="5"`

编辑

尝试像这样

Activity_A.this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

Activity_B.this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

编辑 2

@Override
public void overridePendingTransition(int enterAnim, int exitAnim) {
    super.overridePendingTransition(enterAnim, exitAnim);
    Log.d(LOG_TAG, "In overridePendingTransition");
}

检查这个日志是否被触发,因为我们不知道这个方法是否被调用了?(将其放置在A和B两个位置)

另外请移除 detailIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 标记 如果它被触发,则将 super.overridePendingTransition(enterAnim, exitAnim); 替换为 super.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);


我应该在Activity A还是B中执行此操作,或者两个都要执行?我的minSdk为8。这样行不行? - ambit
为什么你使用了 detailIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);?尝试移除这个 flag。 - Girish Nair
我只是在尝试不同的东西。即使删除它也没有帮助。 - ambit
那也没有帮助。 - ambit
我的手机动画被禁用了。请查看上面roiberg的评论。如果您有想法,请告诉我如何通过编程启用它。感谢您的帮助。 - ambit
好的!!!这里是我找到的一些东西:http://stackoverflow.com/questions/13443942/how-can-i-turn-on-animation-programatically 和 http://stackoverflow.com/questions/10936946/disable-window-and-transition-settings,但我不确定它们是否有效。无论如何,祝你好运 :) - Girish Nair

1

除了在startActivity之后,不需要在其他地方编写。 像这样写。

 Intent detailIntent = new Intent(this, WordDetailActivity.class);

 detailIntent.putExtra(DbAdapter.KEY_ROWID, id);
   startActivity(detailIntent);
 this.overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out)

0
    //annination indside fragment to translate fragment

      getFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.animator.slide_in_right,
                    R.animator.slide_in_left_out,     
                                            R.animator.slide_in_left,
                    R.animator.slide_in_right_out)
            .replace(R.id.linearlayout, new mFragment())
            .addToBackStack("fragments")
            .commit();

  // add inside activity to translate activity

 Intent intent = new Intent(mContext, AbcActivity.class);
            startActivity(intent);
            overridePendingTransition(R.anim.slide_right_in,
                    R.anim.slide_left_out);

  // put this inside OnBackPressed 
    overridePendingTransition(R.anim.slide_left_in, R.anim.slide_right_out);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接