2

是否有可能在兩個不同的應用程序之間使用共享元素轉換?Android中兩個不同應用程序之間的共享元素轉換?

+1

理論上,即使兩個活動屬於不同的應用程序,共享元素轉換也應該可以工作。很顯然,兩個應用程序需要相互協調才能正常工作(即兩者都需要在共享元素上設置相同的'transitionName'等)。你自己測試過了嗎? – 2014-11-03 18:36:52

+0

@AlexLockwood我沒有,但我會因爲沒有人做;) – pixel 2014-11-03 19:34:04

回答

7

是的,共享元素將在不同的應用程序之間工作。你必須同意在這兩個應用程序之間共享一個通用名稱。通常,這是通過@AlexLockwood建議的transitionName完成的,但視圖不必攜帶相同的名稱。如果你這樣做,你會得到很多免費的幫助。

在應用程序之間共享元素有一個重要方面 - 他們必須處於相同的任務。如果活動選項不在同一個任務中,它們將被拒絕。

如果你想在佈局中使用不同的transitionNames,你只是這樣做:

​​3210

現在,如果遠程應用程序中使用「遠程名」在其佈局文件的transitionName,它沒有做任何特別的事情。但是,如果它使用一個不同的名稱,則必須在名稱映射到一個觀點:當你分享的東西,有意見,其中任何一個可以共享的列表

setEnterSharedElementCallback(new SharedElementCallback() { 
     @Override 
     public void onMapSharedElements(List<String> names, 
       Map<String, View> sharedElements) { 
      // You may want to validate that names contains "remoteName" 
      // if this can be instantiated with different shared elements 
      sharedElements.put("remoteName", findViewById(R.id.mySharedElement)); 
     } 
    }); 

這個功能是非常重要的。例如,聯繫人列表將包含具有不同transitionNames的所有聯繫人圖像。從單個聯繫人到聯繫人列表,您需要將單個共享聯繫人映射到列表中的聯繫人之一。

+0

因此,理論上可以在不同的應用程序中定義兩個不同的轉換資源? – pixel 2014-11-14 16:04:14

+1

是的。它的行爲方式與在同一個應用程序中對不同的活動使用不同的轉換方式相同。共享元素退出轉換對調用活動起作用,並將延遲共享元素到被調用活動的轉移,直到完成。共享元素輸入轉換將共享元素從初始位置移動到最終位置。退出過渡適用於調用活動並針對離開的視圖工作。進入活動對被調用的活動起作用並影響輸入視圖。 – 2014-11-16 00:18:08

+0

@GeorgeMount您提到,如果主叫和被叫活動不在同一個任務中,共享元素「活動選項」將被拒絕。這對於退出/輸入沒有任何共享元素的內容轉換也是如此嗎? – 2014-12-18 22:48:32

相關問題