我爲我的應用程序實現了共享元素轉換,其中轉換從主屏幕上的ViewPager中的片段(使用RecyclerView)開始,並再次擴展到全屏庫視圖在ViewPager中的片段內。這一切都工作正常,除非如果圖像不完全可見,它會擴展到全屏幕之前在TabBar頂部。這裏發生的事情:Android共享元素轉換工具欄重疊
我進入轉型看起來是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android">
<targets>
<target android:excludeId="@android:id/statusBarBackground"/>
<target android:excludeId="@android:id/navigationBarBackground"/>
</targets>
</fade>
並退出:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together"
android:duration="500">
<fade>
<targets>
<target android:excludeId="@android:id/statusBarBackground" />
<target android:excludeId="@android:id/navigationBarBackground" />
</targets>
</fade>
</transitionSet>
而在調活動我一直的共享元素回調得到這個:
View navigationBar = activity.findViewById(android.R.id.navigationBarBackground);
View statusBar = activity.findViewById(android.R.id.statusBarBackground);
if (navigationBar != null) {
names.add(navigationBar.getTransitionName());
sharedElements.put(navigationBar.getTransitionName(), navigationBar);
}
if (statusBar != null) {
names.add(statusBar.getTransitionName());
sharedElements.put(statusBar.getTransitionName(), statusBar);
}
終於在styles.xml爲活動主題:
<item name="android:windowContentTransitions">true</item>
<item name="android:windowEnterTransition">@transition/details_window_enter_transition</item>
<item name="android:windowReturnTransition">@transition/details_window_return_transition</item>
我真的不明白是怎麼工具欄(或動作條)可以通過過渡沒有得到這種重疊被排除在外。也許有一種方法可以強制圖像被剪切到頂部,以便在ToolBar下不會完全可見,並且只從可見矩形擴展。
我已經嘗試將<target android:excludeId="@id/action_bar_container"/>
添加到動畫的目標,但同樣的事情仍然發生。
歡迎任何建議。
這將減少共享元素視圖的alpha值,這在我的情況下是有道理的,但看起來不太好。但是,這是一個有效的解決方案,所以我會標記爲正確的。 – Georgi