Activity转场动画效果

Activity transition(Activity转场动画效果)

概念:两个Activity进行跳转的时候,转场动画。
ActivityOptions类。只支持API21以上的版本。
版本判断会比较麻烦,谷歌很贴心 设计了一个兼容类:ActivityOptionsCompat(v4包中)
但是此类在低版本上面并没有转场动画效果,只是解决了我们手动去判断版本的问题而已。

转场动画可以分为两大类:共享元素转换和普通的转换

 使用转换动画前提:需要给两个Activity都设置如下,让其允许使用转场动画。
    //方法一:
    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    //方法二:
    修改主题:<item name="android:windowContentTransitions">true</item>

1.共享元素转换

概念:可以把两个Activity当中的相同的元素关联起来做连贯的变换动画。
前提:(1)给两个Activity当中的共享元素view都设置同一个名字 android:transitionName

            <ImageView
                android:id="@+id/iv1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:transitionName="iv1"
                android:src="@drawable/image" />

按返回键的时候自动实现了返回的共享元素转场动画,源码如下:

        public void onBackPressed() {
            finishAfterTransition();
        }
        public void finishAfterTransition() {
            if (!mActivityTransitionState.startExitBackTransition(this)) {
                finish();
            }
        }
        //单个元素共享
        ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, iv1, "iv1");
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent, optionsCompat.toBundle());
        //多个共享元素
        ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
                .makeSceneTransitionAnimation(this, Pair.create((View)iv1, "iv1"),Pair.create((View)bt, "bt"));
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent, optionsCompat.toBundle());

2.普通的转换动画

(只有API 21才有下面自带效果)
三种系统带的:滑动效果(Slide)、展开效果Explode、渐变显示隐藏效果Fade

Slide slide = new Slide();
slide.setDuration(1000);
getWindow().setExitTransition(slide); // 出去动画
getWindow().setEnterTransition(slide); // 进来动画
Explode explode = new Explode();
explode.setDuration(1000);
getWindow().setExitTransition(explode);//出去的动画
getWindow().setEnterTransition(explode);//进来的动画
Fade fade = new Fade();
fade.setDuration(1000);
getWindow().setExitTransition(fade);//出去的动画
getWindow().setEnterTransition(fade);//进来的动画
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个安卓使用 XML 写动画的示例: 首先,在 res 目录下创建一个新的 XML 文件,例如 transition.xml,然后在其中添加一个 transition 元素,指定动画的类型和时长,例如: ```xml <?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:transitionOrdering="together"> <changeBounds /> <changeTransform /> <changeClipBounds /> <changeImageTransform /> </transitionSet> ``` 在这个示例中,我们使用了一个 transitionSet 元素,它包含了四个子元素,分别是 changeBounds、changeTransform、changeClipBounds 和 changeImageTransform,它们分别表示不同方面的动画效果。 changeBounds 表示在 View 位置和大小发生变化时播放动画,changeTransform 表示在 View 的旋和缩放发生变化时播放动画,changeClipBounds 表示在 View 的裁剪区域发生变化时播放动画,changeImageTransform 表示在 ImageView 的图像变化时播放动画。 接下来,在你的 Java 代码中,使用 ActivityOptionsCompat 对象指定动画的类型和时长,例如: ```java ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( this ).setDuration(500); ``` 最后,在启动动画目标 Activity 时,调用 startActivity() 方法,并传入上面创建的 options 对象,例如: ```java Intent intent = new Intent(this, TargetActivity.class); startActivity(intent, options.toBundle()); ``` 当目标 Activity 启动时,动画就会自动播放。 希望这个示例能够帮助你使用 XML 实现自己的动画

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值