簡體   English   中英

Android片段翻譯動畫不起作用

[英]Android Fragment Translate Animation Not Working

我正在嘗試為兩個片段做一個簡單的翻譯動畫。 一個從右側進入,另一個向左側進入。 我的最小SDK是14.會發生轉換,但沒有實際的動畫。 在動畫xml中指定的時間之后,片段才會交換。 所以動畫時間正在受到尊重,但沒有實際的翻譯。

我的片段動畫代碼是:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.animator.enter_from_right, R.animator.exit_to_left);
fragmentTransaction.replace(android.R.id.content, termsFragment);
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();

我的動畫xml文件是(enter_from_right):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXDelta="100%"
    android:toXDelta="0%"
    android:duration="1000" />
</set>

和exit_to_left:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXDelta="0%"
    android:toXDelta="-100%"
    android:duration="1000"/>
</set>

看起來你混淆了兩個動畫框架, android.animationandroid.view.animation (是的,令人困惑)。

您的XML動畫是兩者之間的混合體。 您可以設置android.animation.ObjectAnimatorandroid.view.animation.Animation :請參閱此處此處以供參考。 在這個特殊情況下,我認為你正在尋找一個簡單的翻譯動畫,它屬於后者,更老,更簡單的類(和鏈接)。

所以:

  • <objectAnimator>標記更改為<translate> ;
  • 將文件從animator文件夾移動到anim資源文件夾,並使用R.anim調用它。

我建議閱讀鏈接的官方文檔,這個主題非常明確。 基本上,對於簡單的平移/旋轉/ alpha動畫,最好在res / anim文件夾中使用視圖動畫( <translate>, <rotate>, <scale>, <alpha> )。

屬性動畫(如res / animator中的<objectAnimator> )是一個更強大的工具,您寧願用於復雜情況。


通過一些研究,我發現setCustomAnimations()的行為更加混亂。

如果使用支持庫,則setCustomAnimations()僅接受簡單的動畫對象(如<translate> )。 在這種情況下,它應該工作,你只需要將getFragmentManager()更改為getSupportFragmentManager()

如果您使用支持庫,則setCustomAnimations()僅接受屬性動畫(如<objectAnimator> )。

在第二種情況下,您的簡單動畫變得非常困難(請參閱此處此處以供參考)。

您可以:

  • 切換到支持庫,如果您的開發尚未處於早期階段,這可能會很無聊,並使用支持片段管理器;
  • 做一些關於objectAnimators和翻譯的工作 - 有很多問題,我只是在上面鏈接了一個;
  • 使用其中一個默認轉換:

     FragmentTransaction t = getFragmentManager().beginTransaction(); t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); or t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); or t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); or 
  • 嘗試在res/animator資源文件夾中使用非常糟糕的<objectAnimator>

     <objectAnimator android:propertyName="translationX" android:duration="1000" android:valueFrom="1000" android:valueTo="0" android:valueType="floatType"/> 

這很糟糕,因為你需要指定一個像素值(這里我放1000),這樣在不同的設備上看起來會有所不同。 但也許對於快速翻譯而言,這不是一個真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM