admin管理员组

文章数量:1573374

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);//进来的动画

本文标签: 转场效果动画Activity