切换活动时如何添加过渡?

时间:2019-03-06 18:16:20

标签: java android animation android-activity

我试图构建一个应用程序,最后我设法实现了一个导航栏,该导航栏使用库(https://github.com/ittianyu/BottomNavigationViewEx)在活动之间进行切换。
一切正常,但是当在活动之间切换时,动画效果很差。

我找到了一个教程,他们在其中使用了 overridePendingTransition()来添加动画,但是由于某些原因,我不能在这里使用它。

我已经创建了4个动画: slideleft,slideleftout,slideright,sliderightout 并添加了变量 num 来跟踪当前选中的活动,并且我添加了一些If语句来检查每种情况下的动画它应该播放(至少这是我要尝试的操作)。

我应该如何在这里实现这些动画?

package com.example.score3.Utils;

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.util.Log;
import android.view.MenuItem;

import com.example.score3.MainActivity;
import com.example.score3.R;
import com.example.score3.SecondActivity;
import com.example.score3.ThirdActivity;
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx;

public class BottomNavigationViewHelper {

    private static final String TAG = "BottomNavigationViewH";

    static int num = 0;

    public static void setupBottomNavigationView(BottomNavigationViewEx bottomNavigationViewEx){
        Log.d(TAG, "setupBottomNavigationView: Setting up BNV");
        bottomNavigationViewEx.enableAnimation(false);
        bottomNavigationViewEx.enableItemShiftingMode(false);
        bottomNavigationViewEx.enableShiftingMode(false);
        bottomNavigationViewEx.setIconSize(30,30);
    }

    public static void enableNavigation(final Context context, BottomNavigationViewEx view){
        view.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.ic_league:
                        Intent intent1 = new Intent(context, MainActivity.class);//ACTIVITY_NUM = 0;
                        context.startActivity(intent1);
                        if(num>0){

                        }

                        num = 0;

                        break;
                    case R.id.ic_csgo:
                        Intent intent2 = new Intent(context, SecondActivity.class);//ACTIVITY_NUM = 1;
                        context.startActivity((intent2));

                        if (num==0) {

                        } else {

                        }

                        num = 1;
                        break;
                    case R.id.ic_starcraft2:
                        Intent intent3 = new Intent(context, ThirdActivity.class);//ACTIVITY_NUM = 2;
                        context.startActivity(intent3);
                        if (num<2){

                        }
                        num = 2;
                        break;
                }


                return false;
            }
        });
    }

}

2 个答案:

答案 0 :(得分:0)

您不能直接使用overridePendingTransition(),因为它是Activityreference here)中的一种方法。 您将需要对调用活动的引用才能像这样进行调用:

activity.overridePendingTransition(R.anim.enter, R.anim.exit);

,或者如果您的最小SDK版本为Bundle,则可以使用Build.VERSION_CODES.JELLY_BEAN提供动画。可使用这种用法的文档herethis method signature

答案 1 :(得分:0)

将这两个文件添加到res / anim文件夹中。

R.anim.fade_in

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

R.anim.fade_out

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

Java代码

 // Check if we're running on Android 5.0 or higher
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //Swap with transition
        //start new activity here
    activity.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    } else {
        // Swap without transition
    }