安卓使用动画启动Acitvity
创始人
2024-03-13 12:58:52
0

1.检查系统版本

动画过渡Activity适用于*Android5.0(API21)*及以上,在代码增加中检查版本增强代码健壮性。

2.指定自定义过渡动画。

过渡可以在xml文件中指定,也可以直接在代码中指定。使用Window.requestFeature()声明启动窗口过渡,这里需要注意的是该声明要在setContentView()方法之前调用不然会报错。使用过渡动画一共有4个方法:
1.Window.setEnterTransition()设置Activity进入时的动画。
2.Window.setExitTransition()设置Activity退出时的动画
3.Window.setSharedElementEnterTransition()设置具有共享元素的Activity进入时的动画。
4.Window.setSharedElementExitTransition()设置具有共享元素的Activity退出时的动画。
切换的Activity和当前Activity中没有共享元素的时候使用1,2指定过渡动画,切换的Activity和当前Activity中有共享元素的时候使用3,4指定过渡动画

3.启动使用过渡动画的Activity

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
示例:直接利用系统自带的过渡效果
布局文件:




第一个Activity的代码:

   private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){  //检查sdk版本是否大于等于5.0getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);  //通过getWindow()方法拿到window对象,设置启用过渡//getWindow().setExitTransition(new Explode());  // 第一个Activity退出时,第二个启动因为第二个设置了启动动画,所以这里退出时的动画不启用。getWindow().setEnterTransition(new Explode());getWindow().setAllowEnterTransitionOverlap(true);}setContentView(R.layout.main);btn = findViewById(R.id.btn_main);btn.setOnClickListener(this);  //设置点击事件}private void setTransition(Context context) {Intent intent = new Intent();intent.setClass(this, AnimationActivity.class);startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());  //调用ActivityOptions.makeSceneTransitionAnimation()传入当前上下文}
}

第二个Activity:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);getWindow().setEnterTransition(new Explode());setContentView(R.layout.animation);findViewById(R.id.btn_ani).setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(this, MainActivity.class);startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());}

效果:result1

也可以只设置第一个Acticity的过渡动画,不过此时第二个Activity要调用 Activity.finishAfterTransition() 方法,而非 Activity.finish()方法。第一个Activity退出时的过渡动画启用。

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.animation);findViewById(R.id.btn_ani).setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(this, MainActivity.class);this.finishAfterTransition();}

效果:
在这里插入图片描述
如果您发现哪里有错,感谢指正!

上官鑫 原文链接

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...