I'm using RotateAnimation and i want to change the animation while it's running, for example, changing the "toDegrees" parameter and thous making the animation shorter or longer.
Thanks.
This can help you (just added getters and setters to needed fields)
package com.test;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.animation.Animation;
import android.view.animation.Transformation;
/**
* An animation that controls the rotation of an object. This rotation takes
* place int the X-Y plane. You can specify the point to use for the center of
* the rotation, where (0,0) is the top left point. If not specified, (0,0) is
* the default rotation point.
*
*/
public class MyRotateAnimation extends Animation {
private float mFromDegrees;
private float mToDegrees;
private int mPivotXType = ABSOLUTE;
private int mPivotYType = ABSOLUTE;
private float mPivotXValue = 0.0f;
private float mPivotYValue = 0.0f;
private float mPivotX;
private float mPivotY;
/**
* Constructor used when a RotateAnimation is loaded from a resource.
*
* @param context Application context to use
* @param attrs Attribute set from which to read values
*/
public ZenRotateAnimation(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Constructor to use when building a RotateAnimation from code.
* Default pivotX/pivotY point is (0,0).
*
* @param fromDegrees Rotation offset to apply at the start of the
* animation.
*
* @param toDegrees Rotation offset to apply at the end of the animation.
*/
public MyRotateAnimation(float fromDegrees, float toDegrees) {
mFromDegrees = fromDegrees;
mToDegrees = toDegrees;
mPivotX = 0.0f;
mPivotY = 0.0f;
}
/**
* Constructor to use when building a RotateAnimation from code
*
* @param fromDegrees Rotation offset to apply at the start of the
* animation.
*
* @param toDegrees Rotation offset to apply at the end of the animation.
*
* @param pivotX The X coordinate of the point about which the object is
* being rotated, specified as an absolute number where 0 is the left
* edge.
* @param pivotY The Y coordinate of the point about which the object is
* being rotated, specified as an absolute number where 0 is the top
* edge.
*/
public MyRotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) {
mFromDegrees = fromDegrees;
mToDegrees = toDegrees;
mPivotXType = ABSOLUTE;
mPivotYType = ABSOLUTE;
mPivotXValue = pivotX;
mPivotYValue = pivotY;
}
/**
* Constructor to use when building a RotateAnimation from code
*
* @param fromDegrees Rotation offset to apply at the start of the
* animation.
*
* @param toDegrees Rotation offset to apply at the end of the animation.
*
* @param pivotXType Specifies how pivotXValue should be interpreted. One of
* Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or
* Animation.RELATIVE_TO_PARENT.
* @param pivotXValue The X coordinate of the point about which the object
* is being rotated, specified as an absolute number where 0 is the
* left edge. This value can either be an absolute number if
* pivotXType is ABSOLUTE, or a percentage (where 1.0 is 100%)
* otherwise.
* @param pivotYType Specifies how pivotYValue should be interpreted. One of
* Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or
* Animation.RELATIVE_TO_PARENT.
* @param pivotYValue The Y coordinate of the point about which the object
* is being rotated, specified as an absolute number where 0 is the
* top edge. This value can either be an absolute number if
* pivotYType is ABSOLUTE, or a percentage (where 1.0 is 100%)
* otherwise.
*/
public MyRotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
int pivotYType, float pivotYValue) {
mFromDegrees = fromDegrees;
mToDegrees = toDegrees;
mPivotXValue = pivotXValue;
mPivotXType = pivotXType;
mPivotYValue = pivotYValue;
mPivotYType = pivotYType;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
float degrees = mFromDegrees + ((mToDegrees - mFromDegrees) * interpolatedTime);
if (mPivotX == 0.0f && mPivotY == 0.0f) {
t.getMatrix().setRotate(degrees);
} else {
t.getMatrix().setRotate(degrees, mPivotX, mPivotY);
}
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
mPivotX = resolveSize(mPivotXType, mPivotXValue, width, parentWidth);
mPivotY = resolveSize(mPivotYType, mPivotYValue, height, parentHeight);
}
/**
* @return the mFromDegrees
*/
public synchronized float getmFromDegrees() {
return mFromDegrees;
}
/**
* @param mFromDegrees the mFromDegrees to set
*/
public synchronized void setmFromDegrees(float mFromDegrees) {
this.mFromDegrees = mFromDegrees;
}
/**
* @return the mToDegrees
*/
public synchronized float getmToDegrees() {
return mToDegrees;
}
/**
* @param mToDegrees the mToDegrees to set
*/
public synchronized void setmToDegrees(float mToDegrees) {
this.mToDegrees = mToDegrees;
}
/**
* @return the mPivotXType
*/
public synchronized int getmPivotXType() {
return mPivotXType;
}
/**
* @param mPivotXType the mPivotXType to set
*/
public synchronized void setmPivotXType(int mPivotXType) {
this.mPivotXType = mPivotXType;
}
/**
* @return the mPivotYType
*/
public synchronized int getmPivotYType() {
return mPivotYType;
}
/**
* @param mPivotYType the mPivotYType to set
*/
public synchronized void setmPivotYType(int mPivotYType) {
this.mPivotYType = mPivotYType;
}
/**
* @return the mPivotXValue
*/
public synchronized float getmPivotXValue() {
return mPivotXValue;
}
/**
* @param mPivotXValue the mPivotXValue to set
*/
public synchronized void setmPivotXValue(float mPivotXValue) {
this.mPivotXValue = mPivotXValue;
}
/**
* @return the mPivotYValue
*/
public synchronized float getmPivotYValue() {
return mPivotYValue;
}
/**
* @param mPivotYValue the mPivotYValue to set
*/
public synchronized void setmPivotYValue(float mPivotYValue) {
this.mPivotYValue = mPivotYValue;
}
/**
* @return the mPivotX
*/
public synchronized float getmPivotX() {
return mPivotX;
}
/**
* @param mPivotX the mPivotX to set
*/
public synchronized void setmPivotX(float mPivotX) {
this.mPivotX = mPivotX;
}
/**
* @return the mPivotY
*/
public synchronized float getmPivotY() {
return mPivotY;
}
/**
* @param mPivotY the mPivotY to set
*/
public synchronized void setmPivotY(float mPivotY) {
this.mPivotY = mPivotY;
}
}