android overridependingtransaction不会播放动画

时间:2015-07-26 15:43:23

标签: java android animation

我无法将overridePendingTransaction用于活动类。如果我在第二个活动中将其用作输入动画,但当我将其用作我想要实际运行动画的活动的退出动画时,动画本身无法正常工作。

我有一个asyncTask,可以在初始屏幕显示时为我下载数据库。完成后,启动画面完成并启动我的主要活动。下面是在splashactivity onCreate方法中运行的代码,它下载数据库并在完成时关闭当前任务并启动我的main。

AsyncSplashDatabaseLoading dbLoader = new AsyncSplashDatabaseLoading(this, 
                (TextView)findViewById(R.id.splash_tv_progress), 
                (ProgressBar)findViewById(R.id.splash_pb_progressbar),
                new AsyncSplashDatabaseLoadingHandler() {

                    public void onPostExecute(int result, Exception ex) {   
                        if (ex != null) {
                            ex.printStackTrace();

                            AlertDialog.Builder alertBuilder = new AlertDialog.Builder(SplashActivity.this);
                            alertBuilder.setMessage(ex.getMessage())
                            .setNegativeButton("Exit", new OnClickListener() {

                                public void onClick(DialogInterface dialog, int which) {
                                    finish();                       
                                }
                            });

                            alertBuilder.create().show();
                        }
                        else {
                            Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
                            startActivity(mainIntent);
                            finish();
                            overridePendingTransition(R.anim.stationary_item, R.anim.fade_scale_up); 
                        }
                    }
                });

        dbLoader.execute();

fade_scale_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">

    <alpha 
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:duration="400" />

    <scale
        android:fromXScale="100%"
        android:toXScale="200%"
        android:fromYScale="100%"
        android:toYScale="200%"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="400" />

</set>

清单中的活动定义

<activity
    android:name=".activities.SplashActivity"
    android:configChanges="locale"
    android:label="@string/app_name"
    android:screenOrientation="portrait" 
    android:theme="@style/Theme.No.Title" >

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

</activity>
<activity
    android:name=".activities.MainActivity"
    android:configChanges="locale"
    android:label="@string/app_name"
    android:screenOrientation="portrait" >
</activity>

Theme.No.Title

的样式
<style name="Theme.No.Title" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

stationary_item.xml工作正常,我在其他地方也使用过,但我会提供的,以便了解我正在做的事情。

stationary_item.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:toXDelta="0"
    android:duration="400" />

我尝试过的事情:

  1. 我通过在不同的overridePendingTransactions方法上使用它来确认动画本身正常工作并且它正常工作(或者如果我将fade_scale_up设置为输入动画而0设置为退出它正常工作)

    < / LI>
  2. 删除了异步任务,并在onCreate方法中运行了活动的开始

  3. 从泼水活动的样式中删除了Theme.No.Title

  4. 尝试使用单一动画(即翻译或仅限alpha)

  5. 我尝试使用0作为输入动画,以便只运行fade_scale_up

  6. 我尝试使用runnable

  7. 运行runOnUIThread
  8. 但是我在overrideTransactionPending上使用了不同的动画并且它正常工作(即我使用下面提供的enter_in_left和exit_to_right)

  9. enter_in_left

    <?xml version="1.0" encoding="utf-8"?>
    <set 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
    
        <translate
            android:fromXDelta="100%"
            android:toXDelta="0%"
            android:fromYDelta="0%" 
            android:toYDelta="0%"
            android:duration="400" />
    
    </set>
    

    exit_to_right

    <?xml version="1.0" encoding="utf-8"?>
    <set
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
    
        <translate 
            android:fromXDelta="0%"
            android:toXDelta="-100%"
            android:fromYDelta="0%"
            android:toYDelta="0%"
            android:duration="400" />
    
    </set>
    

    关于我可以尝试的任何其他想法?

1 个答案:

答案 0 :(得分:0)

我能够弄清楚问题是什么。当动画播放时,仅将屏幕显示在静止位置的输入动画播放超过正在执行退出动画的另一视图。因此,如果我在辅助视图上淡入而不是静止项目,则动画一起播放,并且一个视图不会阻止正在退出的活动的退出动画。

overridePendingTransition(R.anim.fade_in, R.anim.fade_scale_up);

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromAlpha="0.0"
    android:toAlpha="1.0"
    android:duration="800" />