Android: Verwenden von ObjectAnimator zum Übersetzen einer Ansicht mit Bruchwerten der Ansichtsdimension
Es scheint, dass die alten Ansichtsanimationen (translate
, scale
usw.) werden von der nicht mehr akzeptiertAnimationInflater
Zumindest ab ICS. Ich habe seinen Code in 4.0.4 gelesen und er erwartet explizit nur die XML-Elementeset
, objectAnimator
, animator
.
Auch wenn die Dokumentation beihttp://developer.android.com/guide/topics/resources/animation-resource.html enthält weiterhin die Ansichtsanimationen, sie scheinen veraltet zu sein. Der Versuch, sie zu verwenden, führt zum Beispiel zum Fehlerjava.lang.RuntimeException: Unknown animator name: translate
.
Als solches wird es notwendig, Android zu verwendenObjectAnimator
. Es akzeptiert jedoch keine Bruchwerte der zugehörigen Dimension von sich selbst oder seiner übergeordneten Dimension (Breite fürtranslationX
zum Beispiel) wie die alten Ansichtsanimationen in der Form"75%p"
.
Aufbau derObjectAnimator
Manuell zur Laufzeit durch programmgesteuertes Abrufen der Fragmentgröße ist nicht möglich, da dieFragmentTransaction
Akzeptiert nur deklarative Animationen, die von einem Resid angegeben werden.
Mein Ziel ist es, ein Fragment, das eine ganze Aktivität ausfüllt, außerhalb des Bildschirms zu übersetzen (ich mache im Grunde einen Übergang zwischen zwei Fragmenten). Das ist das VorhandeneTranslationAnimation
Implementierung (slide_in_right.xml
, die zusammen mit ihrem Gegenstückslide_out_left.xml
ist aus irgendeinem Grund nicht ausgesetztandroid.R.anim
, und ich muss sie daher in meiner Codebasis duplizieren):
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%p"
android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
Meine API-Ebene ist auf 14 festgelegt.
Vielen Dank!