什麼是共享元素呢?能夠理解爲當頁面跳轉是,看起來一個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)
經過函數的參數咱們應該就能夠看的明白,就不解釋了。這兩個函數就是用來設置共享元素的。圖片