Android|Fragment和Activity页面跳转实现左进右出的过渡动画

2023.04.03 补充该功能在 Fragment 中的使用方法:

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);
    }

全部代码

第一个ActivityMainActivity.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);
            }
        });

    }
}

第二个ActivityTwoActivity.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
onBackPressedonKeyDown方法的区别可参考此篇博客:http://t.csdn.cn/59b5r
部分内容借鉴此篇博客:http://t.csdn.cn/6ardU

你可能感兴趣的:(Andorid,android,java,开发语言)