Android转场动画的实现

本文详细介绍如何在Android中实现Activity间的共享元素转场动画,包括设置transitionName、使用ActivityOptions、配置主题及Transition类型等关键步骤。适用于Android 5.X及以上版本。
摘要由CSDN通过智能技术生成

实现

从activityA到activityB

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                    ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, imgHeart, "img_heart");
                    Intent intent = new Intent(mActivity, ClothesDetectActivity.class);
                    intent.putExtra("shoeEntity", shoeEntity);
                    startActivity(intent, options.toBundle());
                }else {
                    Intent intent = new Intent(mActivity, ClothesDetectActivity.class);
                    intent.putExtra("shoeEntity", shoeEntity);
                    startActivity(intent);
                }

从activityB返回

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        finishAfterTransition();
    }else {
        finish();
    }

设置transitionName

两个页面布局中要进行动画变换的设置transitionName并取相同名字

    <ImageView
                android:id="@+id/img_heart"
                android:transitionName="img_heart"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="@dimen/dimen_48_dip"
                android:src="@drawable/icon_big_whiteheart"
                tools:background="@color/main_color_green" />

主题设置

A页面

 <style name="AppThemeT1" parent="AppTheme">
        <item name="android:windowContentTransitions">true</item>
    </style>

B页面

 <style name="AppThemeT2" parent="AppTheme">
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

这里B页面需要设置为透明,否则可能出现闪一下黑色背景之类的情况
A页面不要设置windowExitTransition

多个共享的View

Pair<View, String> pair1 = new Pair<View, String>(imageView, getString(R.string.shareElement_img));
Pair<View, String> pair2 = new Pair<View, String>(textView, getString(R.string.shareElement_txt));
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, pair1, pair2);
startActivity(new Intent(this, TwoActivity.class),options.toBundle());

相关资料

Android 5.X 提供了三种Transition类型:

进入:一个进入的过渡动画决定Activity中的素有的视图怎么进入屏幕。

退出:一个退出的过渡动画决定了一个Activity 中的所有视图怎么退出屏幕。

共享元素:一个共享元素过渡动画决定两个Activity之间的过渡,怎么共享它们的视图。

进入和退出的效果包括:

explode(分解) ———从屏幕中间进或出,移动视图。

slide(滑动)———从屏幕边缘进或出,移动视图。

fade(淡出)———通过改变屏幕上视图的不透明度达到添加或移除的效果

共享元素包括:

changeBounds———改变目标视图的布局边界

changeClipBounds———裁切目标视图边界

changeTransform———改变目标视图的缩放比例和旋转角度

changeImageTransfrom———改变目标图片的大小和缩放比例
<item name="android:windowExitTransition">@android:transition/fade </item>
<item name="android:windowExitTransition">@android:transition/explode </item>

theme说明

<resources> <style name="ShareElementAppTheme" parent="AppTheme"> <item name="android:windowContentTransitions">true</item> <item name="android:windowAllowEnterTransitionOverlap">true</item> <item name="android:windowAllowReturnTransitionOverlap">true</item> <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> <item name="android:windowSharedElementExitTransition">@android:transition/move</item> <item name="android:windowEnterTransition">@android:transition/explode</item> <item name="android:windowExitTransition">@android:transition/explode</item> </style> </resources>

第一个item是我们必须要设置的。接下来的6个是有规律的。前两个:指定进入和退出的动画可以重叠。中间两个:指定我们使用sharedElement时的进入和退出动画。最后两个:指定普通进入和退出的transition。这里使用的是系统自带的。不指定效果的话,系统会使用默认效果。

当然我们也能自定义效果,Android 5.0(API 级别 21)也支持这些共享元素转换:

changeBounds - 为目标视图的布局边界的变化添加动画。
changeClipBounds - 为目标视图的裁剪边界的变化添加动画。
changeTransform - 为目标视图的缩放与旋转变化添加动画。
changeImageTransform - 为目标图像的大小与缩放变化添加动画。

android:transitionName="…"与android:transitionGroup="true"这两个属性值。
其中第一个:在布局文件中对于要共享View添加的Flag。需要共享View的ID可以不同,但是设定的这个name需要一致。
第二个:应该将这个ViewGroup视为单个实体,也就是当成一个Transition来处理。

参考文章

Shared Element Activity Transition

Android共享元素转场动画兼容实践

Android 5.X Activity过渡动画,以及漂亮的共享元素效果

Transition 动画实现Activity跳转动画

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值