package org.itsnat.droid.impl.xmlinflater.anim.attr; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import org.itsnat.droid.impl.dom.DOMAttr; import org.itsnat.droid.impl.util.MiscUtil; import org.itsnat.droid.impl.xmlinflater.FieldContainer; import org.itsnat.droid.impl.xmlinflater.MethodContainer; import org.itsnat.droid.impl.xmlinflater.PercFloatImpl; import org.itsnat.droid.impl.xmlinflater.anim.AttrAnimationContext; import org.itsnat.droid.impl.xmlinflater.anim.classtree.ClassDescAnimationRotate; import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDesc; /** * Created by jmarranz on 30/04/14. */ public class AttrDescAnimation_view_animation_RotateAnimation_pivotXY extends AttrDesc<ClassDescAnimationRotate,RotateAnimation,AttrAnimationContext> { protected FieldContainer<Integer> fieldMPivotXYType; protected FieldContainer<Float> fieldMPivotXYValue; protected MethodContainer<Void> methodInitializePivotPoint; public AttrDescAnimation_view_animation_RotateAnimation_pivotXY(ClassDescAnimationRotate parent, String name) { super(parent,name); if (!"pivotX".equals(name) && !"pivotY".equals(name)) throw MiscUtil.internalError(); String fieldPivotXYTypeName; String fieldPivotXYValueName; if ("pivotX".equals(name)) { fieldPivotXYTypeName = "mPivotXType"; fieldPivotXYValueName = "mPivotXValue"; } else { fieldPivotXYTypeName = "mPivotYType"; fieldPivotXYValueName = "mPivotYValue"; } this.fieldMPivotXYType = new FieldContainer<Integer>(RotateAnimation.class, fieldPivotXYTypeName); this.fieldMPivotXYValue = new FieldContainer<Float>(RotateAnimation.class, fieldPivotXYValueName); this.methodInitializePivotPoint = new MethodContainer<Void>(RotateAnimation.class,"initializePivotPoint"); } @Override public void setAttribute(RotateAnimation rotateAnimation, DOMAttr attr, AttrAnimationContext attrCtx) { PercFloatImpl convValue = getPercFloat(attr.getResourceDesc(),attrCtx.getXMLInflaterContext()); int pivotType; float pivotValue; if (convValue.isFraction()) { pivotType = convValue.isFractionParent() ? Animation.RELATIVE_TO_PARENT : Animation.RELATIVE_TO_SELF; pivotValue = convValue.toFloatBasedOnDataType(); } else { pivotType = Animation.ABSOLUTE; pivotValue = convValue.toFloatBasedOnDataType(); } fieldMPivotXYType.set(rotateAnimation,pivotType); fieldMPivotXYValue.set(rotateAnimation,pivotValue); methodInitializePivotPoint.invoke(rotateAnimation); // rotateAnimation.initializePivotPoint() } @Override public void removeAttribute(RotateAnimation rotateAnimation, AttrAnimationContext attrCtx) { setAttributeToRemove(rotateAnimation, "0", attrCtx); } }