什么是共享元素呢?能够理解为当页面跳转是,看起来一个View属于界面A又属于界面B。 看一下下边这个效果:java
在这个转场动画中,图片和文字都是共享元素,具体怎么实现这种效果呢?android
首先须要先在style.xml
配置上容许内容过分。函数
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:windowContentTransitions">true</item> </style>
为共享元素设置上transtionName
。设置name的时候两个界面都要添加上,这样才能够检测到是哪两个元素共享。动画
<ImageView android:id="@+id/image" android:layout_width="150dp" android:layout_height="100dp" android:transitionName="image" android:src="@drawable/default_image" />
也能够在代码中设置:spa
imageView.setTransitionName("image");
设置好以上的参数后,就能够经过跳转来添加相应的动画了。是否是特别的简单。是的。没有错。只不过再跳转的时候还须要加点东西。看下代码:code
Intent i = new Intent(mContext, Main2Activity.class); ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, holder.image, "image"); startActivity(i,optionsCompat.toBundle());
经过上面的代码就能够实现ImageView的共享了。相似文章开头的效果。设置多个元素共享的时候须要这样:xml
Intent i = new Intent(mContext, Main2Activity.class); Pair<View, String> pair = new Pair<View, String>(holder.image,"image"); Pair<View,String> pairText = new Pair<View, String>(holder.text,"text"); ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, pair,pairText); startActivity(i,optionsCompat.toBundle());
在上面的跳转代码中咱们用到了ActivityOptionsCompat
的两个静态方法。分别是blog
makeSceneTransitionAnimation(Activity activity,View sharedElement,String sharedElementName)
makeSceneTransitionAnimation(Activity activity,Pair<View, String>... sharedElements)
经过函数的参数咱们应该就能够看的明白,就不解释了。这两个函数就是用来设置共享元素的。图片