Tip:使用Activity实现的直接看下面就行,不用看这一节代码
1、如果是在同一个activity管理下的fragment中跳转直接使用以下代码:
//replace() 实现跳转替换
//setCustomAnimations() 实现跳转动画
getFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_in_from_right, R.anim.slide_out_from_left, R.anim.slide_in_from_left, R.anim.slide_out_from_right)
.replace(R.id.welcomeLayout, new registerFragment()) //第一个参数是activity容器,第二个参数是替换的fragment页面
.addToBackStack(null) //将页面加入回退栈不然会被销毁
.commit();
2、如果是在不同activity管理的fragment中跳转,在需要跳转的地方使用:
Intent intent = new Intent(getContext(), MainActivity.class);//写fragment的管理Activity
startActivity(intent);
getActivity().overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_from_right); //两个动画文件
在跳转后fragment的管理activity中重写 finish() 方法( onBackPressed() 方法也可以):
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_from_right); //两个动画文件
}
至此,两种方式都可实现动画了!
以下是原文章:
在res中创建anim文件夹,之后创建四个动画文件:
文件名:slide_in_from_left.xml
效果:页面从左侧向右侧进入
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%"
android:toXDelta="0"
android:duration="2000">
translate>
文件名:slide_in_from_right.xml
效果:页面从右侧向左侧进入
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%"
android:toXDelta="0"
android:duration="2000">
translate>
文件名:slide_out_from_left.xml
效果:页面从右侧向左侧退出
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="-100%"
android:duration="2000">
translate>
文件名:slide_out_from_right.xml
效果:页面从左侧向右侧退出
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="100%"
android:duration="2000">
translate>
//该方法的第一个参数是作用于第二个Activity进入的动效,第二个参数是作用于当前Activity退出的动效
overridePendingTransition(R.anim.slide_in_from_right,R.anim.slide_out_from_left);
第一个Activity页面在跳转方法后写入其方法,实现两个Activity的过渡动画:
Button bt_jump = findViewById(R.id.bt_jump);
bt_jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,TwoActivity.class);
startActivity(intent);
//该方法的第一个参数是作用于第二个Activity进入的动效,第二个参数是作用于当前Activity退出的动效
overridePendingTransition(R.anim.slide_in_from_right,R.anim.slide_out_from_left);
}
});
第二个Activity页面需要重写按下返回键方法并写入其方法,实现两个Activity的过渡动画:
/**
* 重写按下返回键的方法
*/
@Override
public void onBackPressed() {
super.onBackPressed();
//该方法的第一个参数是作用于第二个Activity进入的动效,第二个参数是作用于当前Activity退出的动效
overridePendingTransition(R.anim.slide_in_from_left,R.anim.slide_out_from_right);
}
第一个Activity,MainActivity.java:
package com.example.activityswitch;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt_jump = findViewById(R.id.bt_jump);
bt_jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,TwoActivity.class);
startActivity(intent);
//该方法的第一个参数是作用于第二个Activity进入的动效,第二个参数是作用于当前Activity退出的动效
overridePendingTransition(R.anim.slide_in_from_right,R.anim.slide_out_from_left);
}
});
}
}
第二个Activity,TwoActivity.java:
package com.example.activityswitch;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class TwoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
}
/**
* 重写按下返回键的方法
*/
@Override
public void onBackPressed() {
super.onBackPressed();
//该方法的第一个参数是作用于第二个Activity进入的动效,第二个参数是作用于当前Activity退出的动效
overridePendingTransition(R.anim.slide_in_from_left,R.anim.slide_out_from_right);
}
}
overridePendingTransition方法可参考此篇博客:http://t.csdn.cn/xm4Pq
onBackPressed与onKeyDown方法的区别可参考此篇博客:http://t.csdn.cn/59b5r
部分内容借鉴此篇博客:http://t.csdn.cn/6ardU