2015-10-26 11 views
5

Tôi có một bố trí như một trong hình dưới đâyAndroid chuyển yếu tố chia sẻ, sai vị trí bắt đầu

enter image description here

nơi một khung màu cam là một HostFragment được xây dựng như thế này:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@id/coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <android.support.design.widget.AppBarLayout 
     android:id="@id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

      <android.support.v7.widget.Toolbar 
       android:id="@id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:titleMarginStart="68dp" 
       /> 

      <de.halfbit.audiopie.ui.common.views.SlidingTabs 
       android:id="@id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:slidingTabsIndicatorColor="@color/accent" 
       /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</android.support.design.widget.CoordinatorLayout> 

và một khung màu xanh là một đứa trẻ ItemsFragment với một số RecyclerView trong đó.

Khi tôi nhấp vào một ô trong RecyclerView Tôi thay thế HostFragment bằng một đoạn ContentFragment khác, giả sử chia sẻ hình ảnh được nhấp. Tôi làm điều đó bằng cách áp dụng một sự chuyển đổi yếu tố chia sẻ như sau:

FragmentManager fm = getChildFragmentManager(); 
Fragment fragment = ContentFragment.newInstance(); 

AutoTransition autoTransition = new AutoTransition(); 
autoTransition.setDuration(3000); 
fragment.setSharedElementEnterTransition(autoTransition); 

fm.beginTransaction() 
    .replace(R.id.library, fragment) 
    .addSharedElement(view, "cover") 
    .commit(); 

Nó hoạt động tốt bên cạnh một điều: vị trí ban đầu của gạch bìa khi hình ảnh động bắt đầu trong ContentFragment là sai (see this screen cast video) - nó đã không mong muốn dưới bù đắp.

Hình ảnh bù đắp này trông bằng với chiều cao của thanh tab của HostFragment. Các bạn có ý tưởng nào về cách tránh sự bù đắp này không?

Điều cũng đáng nói đến, rằng tất cả RecyclerView's trẻ em đều có duy nhất transitionNames.

+0

Bạn đã thử cách ly vấn đề, để xem liệu nó có phải do 'CoordinatorLayout' gây ra không? Đó là một lớp lỗi, vì vậy tôi sẽ thử chạy hình ảnh động trong một phụ huynh 'FrameLayout' đơn giản, và nhìn thấy nếu vấn đề vẫn còn hiện diện. –

+2

@PaulBurke Cảm ơn bạn đã xem xét nó. Tôi cảm thấy buồn bã bởi số lượng các vấn đề trong thư viện thiết kế và hỗ trợ mới nhất. Vì vậy, tôi quyết định sử dụng một loại hoạt hình khác ngay bây giờ. Tôi cần một chút thời gian để bình tĩnh và sau đó tôi sẽ cố gắng cô lập vấn đề. –

Trả lời

0

Tôi biết câu hỏi này là cổ xưa nhưng tôi đã chiến đấu với một vấn đề tương tự như vậy.

Cuối cùng, tất cả những gì tôi phải làm là thay đổi cờ android: clipChildren trong chế độ xem gốc xml thành false.

Các vấn đề liên quan