切换活动时如何添加过渡?
Posted
技术标签:
【中文标题】切换活动时如何添加过渡?【英文标题】:How to add a transition when switching activities? 【发布时间】:2019-03-06 18:16:19 【问题描述】:我正在尝试构建一个应用程序,最终我设法实现了一个导航栏,该导航栏使用库 (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;
);
【问题讨论】:
【参考方案1】:你不能直接使用overridePendingTransition()
in 因为它是来自Activity
(reference here) 的方法。
要么你需要一个调用活动的引用才能像这样调用:
activity.overridePendingTransition(R.anim.enter, R.anim.exit);
如果您的最低 SDK 版本为 Build.VERSION_CODES.JELLY_BEAN
,您也可以使用 Bundle
来提供动画。这种用法的文档是可用的here
this method signature。
【讨论】:
【参考方案2】:将这两个文件添加到 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
【讨论】:
您可以根据需要更改您的过渡,如滑入、滑出、向右滑、向左滑等以上是关于切换活动时如何添加过渡?的主要内容,如果未能解决你的问题,请参考以下文章