如何使用
我们知道开启一个 activity 只需 startActivity(); 即可,更多的是,我们要想加入过渡动画,也只需要在 startActivity(); 中传入需要的参数即可。
- 第一步:
例如,我要从 MainActivity 中启动 AnimationActivity,只需要在 MainActivity 中 startActivity(); 传入参数即可,代码如下:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
- 第二步:
在 AnimationActivity 中的 setContentView(); 方法前加入一行代码:
//在需要启动的 activity 中开启动画的特征
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
或者,在 AnimationActivity 中设置如下 style,并引用到 AnimationActivity 即可。
true
- 第三步:
在 AnimationActivity 中设置要应用的动画效果,如上面介绍的,效果有三种。然后选择任意一种即可,代码如下:
getWindow().setEnterTransition(new Explode());
getWindow().setEnterTransition(new Slide());
getWindow().setEnterTransition(new Fade());
上面设置的是进入 activity 的动画,也可以设置退出 activity 的动画,代码如下:
getWindow().setExitTransition(new Explode());
getWindow().setExitTransition(new Slide());
getWindow().setExitTransition(new Fade());
共享元素动画效果
通过上面这三个步骤,我相信你一定可以实现简单的 activity 过渡动画了,然后接下来介绍的是 activity 共享元素的动画效果,这里会稍微难一点。我就拿我的例子一部分来举例子,这样显得更加容易理解。
例如,我的例子中两个页面都有一个同样内容的 textview ,所以要使其得到共享。
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_shared_element"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“bottom”
android:layout_marginTop=“56dp”
android:layout_marginBottom=“72dp”
android:gravity=“center_horizontal”
android:text="@string/app_txt"
android:textColor="#323232"
android:textSize=“18sp”
android:transitionName=“shared element”
tools:ignore=“UnusedAttribute” />
注意:我们必须为两个页面的共同元素(textview)设置一个属性:
android:transitionName=“shared element”
并且必须保证两个 textview 的 transitionName 设置的内容一致,否者将无法达到共享元素的动画效果。
最后的关键一步:更改 startActivity(); 参数内容,因为我们设定了共享元素,所以到进行指定,这样 startActivity 时才能够找到目标,所以启动 activity 的代码因改为这样:
//这里的 sharedElementName 必须与 xml 文件中设置的值一致,否则无法共享
// tvSharedElement 表示要参与共享的 view
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, tvSharedElement,
“shared element”).toBundle());
如果你的两个 activity 中有两个及以上的内容需要共享元素动画时,你只需要修改代码为:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create((View) tvSharedElement, “shared element”))
.toBundle());
这里通过 Pair.create(view,“shared name”);来传入需要共享的元素。
好了,本篇关于 android5.x 提供的几种过渡动画效果就展示完了,虽然过渡动画效果很漂亮,但是也要合理的运用,也不能每一个 activity 都设置过渡动画。那么,如上动态图演示的一样,本案例关键代码将在下面贴出:
案例代码
MainActivity 代码如下:
package com.xww.activityanims;
import android.annotation.SuppressLint;
import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatButton;
import android.support.v7.widget.AppCompatTextView;
import android.util.Pair;
import android.view.View;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@SuppressLint(“NewApi”)
public class MainActivity extends AppCompatActivity {
@BindView(R.id.btn_explode)
AppCompatButton btnExplode;
@BindView(R.id.btn_slide)
AppCompatButton btnSlide;
@BindView(R.id.btn_fade)
AppCompatButton btnFade;
@BindView(R.id.tv_shared_element)
AppCompatTextView tvSharedElement;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.btn_explode)
void onExplodeClick() {
Intent intent = new Intent(this, AnimationsActivity.class);
startActivityWithAnimation(intent, “explode”);
}
@OnClick(R.id.btn_slide)
void onSlideClick() {
Intent intent = new Intent(this, AnimationsActivity.class);
startActivityWithAnimation(intent, “slide”);
}
@OnClick(R.id.btn_fade)
void onFadeClick() {
Intent intent = new Intent(this, AnimationsActivity.class);
startActivityWithAnimation(intent, “fade”);
}
private void startActivityWithAnimation(Intent intent, String animType) {
intent.putExtra(“anim”, animType);
//这里的 sharedElementName 必须与 xml 文件中设置的值一致,否则无法共享
// tvSharedElement 表示要参与共享的 view
// startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, tvSharedElement,
// “shared element”).toBundle());
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create((View) tvSharedElement, “shared element”))
.toBundle());
}
}
MainActivity 布局文件我就不贴出来了,就三个 Button 和一个 TextView,最后我会给出本案例完整代码的资源链接,大家若不懂可以去下载来参考。
接着是 AnimationsActivity 的代码,这是一个开启动画的 Activity ,代码如下:
package com.xww.activityanims;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatTextView;
import android.transition.Explode;
import android.transition.Fade;
import android.transition.Slide;
import android.view.Window;
import butterknife.BindView;
import butterknife.ButterKnife;
@SuppressLint(“NewApi”)
public class AnimationsActivity extends AppCompatActivity {
@BindView(R.id.tv_anim_type)
AppCompatTextView tvAnimType;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
最后
在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-I1sqYcS7-1643773880617)]
本文在开源项目:【GitHub 】中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…