2016-03-21 32 views
3

我有一個共同的元素轉變工作時`RecyclerView項目點擊開始詳細的活動,但對項目的點擊產生的連鎖反應是不可見的波及效應不會與共享元素的過渡和RecyclerView

啓動活動與共享過渡族

Intent intent = IntentUtils.createDetailsIntent(InspectionListFragment.this.getContext(), record); 
Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), 
        view, getString(R.string.transition_element)).toBundle(); 
getActivity().startActivity(intent, options); 

我注意到了這個日誌消息

D/OpenGLRenderer: endAllStagingAnimators on 0x95e86600 (RippleDrawable) with handle 0xaa6c2760 

如果我刪除過渡,漣漪效果(我沒有看到這個消息)。

延遲活動開始使用處理器

如果我使用一個處理器與postDelayed啓動活動中,結果喜憂參半。我看到了漣漪,但過渡並不順利:

handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Intent intent = IntentUtils.createDetailsIntent(InspectionListFragment.this.getContext(), record); 
      Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), 
        view, getString(R.string.transition_element)).toBundle(); 
      getActivity().startActivity(intent, options); 
     } 
    }, 200); 

使用的ListView

注意使用ListView同一項目的佈局和makeSceneTransitionAnimation工作正常。不幸的是,這不合適。

的項目佈局

<LinearLayout 
    android:background="?android:attr/selectableItemBackground" 
    android:clickable="true" 
    android:focusable="true" 
+0

有完全相同的問題 – jiawen

+0

我還沒有找到更好的解決方案。我有興趣瞭解爲什麼'ListView'和'RecyclerView'之間存在這樣的區別。 – sidecarcat

回答

0

我遇到同樣的問題,當我的卡作爲共享元素中有一個ImageView。我能夠通過使用CardView作爲共享元素轉換的源視圖(以及連鎖反應)來解決此問題。

<android.support.v7.widget.CardView 
    android:id="@+id/itemCard" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="8dp" 
    app:cardCornerRadius="@dimen/card_corner_radius" 
    app:cardElevation="@dimen/card_elevation" 
    android:layout_gravity="center" 
    android:clickable="true" 
    android:onClick="@{onItemClick}" 
    android:foreground="?android:attr/selectableItemBackground" 
    > 

我使用數據綁定,而是共享元件變化基本上只是選擇不同的源代碼視圖:

// before: 
//onItemClickListener.onItemClick(view, getAdapterPosition(), getItemId(), Pair.create((View)b.itemImage, "activity_image")); 

// after: 
onItemClickListener.onItemClick(view, getAdapterPosition(), getItemId(), Pair.create((View)b.itemCard, "activity_image")); 

在此之前,我也使用postDelayed具有短延遲試過,但我發現這種方法爲我喜歡的導航添加了太多的延遲。