我试图构建一个应用程序,最后我设法实现了一个导航栏,该导航栏使用库(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;
}
});
}
}
答案 0 :(得分:0)
您不能直接使用overridePendingTransition()
,因为它是Activity
(reference here)中的一种方法。
您将需要对调用活动的引用才能像这样进行调用:
activity.overridePendingTransition(R.anim.enter, R.anim.exit);
,或者如果您的最小SDK版本为Bundle
,则可以使用Build.VERSION_CODES.JELLY_BEAN
提供动画。可使用这种用法的文档here
与this 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
}