11

我希望你能幫我解決這個問題。我有兩個片段,第一個是帶有多個圖像的回收站,第二個片段是此圖像的詳細信息視圖。如果用戶點擊圖片,應用會執行片段交易並顯示詳細信息。Android - Recyclerview共享元素轉換項目位置

我已經成功實現了片段之間的共享元素轉換,如果我點擊第一個片段上的小圖片,它會變得更大並移動到細節視圖上的最終位置。

那麼,這是問題,圖像的初始位置不是預期的,它開始移動從它的原始位置幾個像素,當我點擊圖像跳到一點點的權利和底部。

這是怎麼發生的?它很煩人!

的轉變XML:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> 
    <changeTransform /> 
    <changeBounds /> 
</transitionSet> 

如果我在外面recyclerview一個按鈕做同樣的它完美。這是回收者視圖中的某種錯誤嗎?

+0

也想澄清這一點,因爲我今天遇到類似的問題 – AndyRoid 2015-02-24 22:13:03

+0

@AndyRoid如果你發現如何解決它,請讓我們知道 – Istigar 2015-03-13 13:01:54

+1

你可以發佈你正在使用的任何相關代碼?說明問題的視頻也可能有所幫助(Android Studio的屏幕捕獲功能可以在此處派上用場)。 – 2015-03-13 18:29:02

回答

2

如果您的共享元素爲ImageView s,那麼您還需要使用ChangeImageTransform轉換。嘗試將<changeImageTransform />添加到您的轉換集。

+0

感謝您的幫助,但我已經嘗試了很多轉換組合,並且結果仍然相同。 – Istigar 2015-02-25 12:41:27

11

您的RecyclerView項目需要在其共享視圖上設置唯一的過渡名稱。如果您想象RecyclerView的渲染布局層次結構,則會有很多項目(視圖)具有相同的轉換名稱。這種方式目前還不清楚實際共享元素的轉換。例如,您可以將該位置附加到視圖轉換名稱,例如transition1,transition2等等。現在當你開始你的詳細片段時,你必須將轉換名稱交給它,並將這個名稱設置爲你詳細片段中的共享視圖,例如。在onViewCreated()中。

2

如果沒有從您的回收商視圖中獲取正確的視圖,則可能會發生這種情況。確保您使用精確視圖(基於位置)而不是根視圖。對於例如在下面的代碼片段視圖V(你在onclick接收())應使用:

mAdapter.setOnItemClickListener(

       new MyAdapter.OnItemClickListener() { 

        @Override 
        public void onClick(View v, int position) { 

         ImageView heroView; 
         heroView = (ImageView) v.findViewById(R.id.category_icon); 
         ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
           getActivity(), heroView, heroView.getTransitionName()); 
         ActivityCompat.startActivity(getActivity(), intent, options.toBundle()); 
0

我通過這篇文章Shared Element Transitions - Part 4: RecyclerView,這表明代碼剪,並給予詳細的解釋下解決了這個問題。

請確保必須相同,也是android:transitionName之間共享的元素已經到在視圖層次結構獨特

至於RecyclerViewFragment,如果我們把XML中的transitionName然後在庫所有的ImageView將具有相同的一個,這意味着,當我們回到畫廊的框架將不知道從哪裏移動圖像。

由於項目位置是唯一的,所以最好使用此處的位置來設置onBindViewHolder中的transitionName。

相關問題