Ich versuche, eine benutzerdefinierte Animation für mein Fragment zu erstellen.
Ich habe die Online-Tutorials befolgt, aber den folgenden Fehler erhalten:
java.lang.RuntimeException: Unbekannter Animatorname: translate
Das XML für die Animation ist unten:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%"
android:toXDelta="0"
android:duration="300" />
</set>
Die Java-Datei wird unten angezeigt:
public void goCategory(View v) {
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left);
ft.show(fragment);
ft.commit();
}
Ich habe Probleme, die Lösungen in den anderen Threads zu verstehen. Wenn jemand es für mich dumm machen könnte, würde ich es wirklich schätzen.
android
android-fragments
android-animation
SalicBlu3
quelle
quelle
Antworten:
Es wird nicht funktionieren, Sie sollten den Objektanimator verwenden
animator / slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:propertyName="x" android:valueFrom="1000" android:valueTo="0" android:valueType="floatType" /> </set>
animator / slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:propertyName="x" android:valueFrom="0" android:valueTo="-1000" android:valueType="floatType" /> </set>
Klassenunterkategorie
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub // return super.onCreateView(inflater, container, savedInstanceState); View view = (ViewGroup) inflater.inflate(R.layout.product_frame, null); getFragmentManager().beginTransaction() .replace(R.id.sub_header, new Sub_Header()).commit(); getFragmentManager() .beginTransaction() .setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right, 0, 0) .replace(R.id.product_frame, new Sub_Catagory_Grid()).commit(); view.getWidth(); return view; }
quelle
Wahrscheinlich mischen Sie zwei Apis. Es gibt zwei Fälle:
Wenn Sie unter 3.0 zielen oder Support-v4-Fragmente verwenden: Sie müssen die alte Animations-API verwenden, dh die, die Sie verwenden (sie gehen in anim / und sind
R.anim.thing
)Wenn Sie auf über 3.0 abzielen und native Fragmente verwenden: Sie müssen die neuen Animations-APIs verwenden, dh ObjectAnimators (sie gehen in animator / und sind
R.animator.thing
).quelle
Als @minivac antwortete, mischen Sie zwei APIs. Weitere Informationen zum Hinzufügen benutzerdefinierter Animationen zu Fragmenttransaktionen finden Sie im Beispiel zum Anzeigen von Karten-Flip-Animationen in den Android-Schulungshandbüchern. Es löst genau Ihr Problem.
quelle