0

正如您在此video中看到的那樣,我試圖爲新活動的開放設置動畫。圖片在打開活動時可以正常動畫,但在返回時失敗(我正在使用supportFinishAfterTransition()Android共享元素轉換錯誤

我試過了各種我在這裏或Google上找到的方法,但沒有任何工作,即:

定義過渡RES /轉換下:

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

,然後在這兩個樣式的主要活動,並說我開了一個使用它:

<!-- enable window content transitions --> 
<item name="android:windowActivityTransitions">true</item> 
<!-- specify shared element transitions --> 
<item name="android:windowSharedElementEnterTransition"> 
    @transition/change_image_transform</item> 
<item name="android:windowSharedElementExitTransition"> 
    @transition/change_image_transform</item> 

我也試過同樣在我的Java代碼:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 
getWindow().setSharedElementExitTransition(...); 
getWindow().setSharedElementEnterTransition(...); 

從我的觀點持有者我這樣做在開始新的活動:

private void openNewActivity() { 
     String transitionName = "details"; 

     Intent intent = new Intent(mContext, ActivityCardDetails.class); 

     ViewCompat.setTransitionName(mImageView, transitionName); 

     //noinspection unchecked 
     ActivityOptionsCompat options = 
       ActivityOptionsCompat.makeSceneTransitionAnimation((MainActivity)mContext, 
         mImageView, // The view which starts the transition 
         transitionName // The transitionName of the view we’re transitioning to 
       ); 


     ActivityCompat.startActivity((MainActivity) mContext, intent, options.toBundle()); 
    } 

這是啓動的ImageView的動畫:

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="180dp" 
     android:id="@+id/business_card_image" 
     android:adjustViewBounds="true" 
     android:scaleType="centerCrop" /> 

,這是一個應該動畫回第二ImageView的:

<ImageView 
      android:id="@+id/business_card_image" 
      android:layout_width="match_parent" 
      android:layout_height="180dp" 
      android:scaleType="centerCrop" 
      android:fitsSystemWindows="@bool/isFitSystemWindows" 
      android:transitionName="@string/transition_card_details" 
      app:layout_collapseMode="parallax" /> 

PS:我正在使用Glide加載圖像,因爲這是用戶創建的內容,我無法控制圖像的高寬比。

Glide.with(mContext) 
    .load(toLoad) 
    .fitCenter() 
    .centerCrop() 
    .crossFade() 
    .into(mImageView); 

我一直在努力解決這個問題好幾周了,我似乎無法克服它。

爲什麼它不能讓它的邊界變回來?

謝謝!

更新:顯然該錯誤與圖像寬度有關。如果我將寬度設置爲常量(比如200dp),則動畫在兩種方式中運行都很好,但如果將圖像寬度設置爲match_parent,則返回動畫會被破壞。

UPDATE2:我幾乎可以說,這個錯誤是關係到圖像加載LIB(滑翔或畢加索都有這個問題)

回答

3

顯然,問題已經herehere之前進行了描述。這個問題的確來自圖像加載器。

訣竅是使用.dontTransform()

ActivityCompat.postponeEnterTransition(this) 
ActivityCompat.startPostponedEnterTransition(ActivityCardDetails.this) 

只播放動畫時,圖像是否正確裝入。