use of com.nineoldandroids.animation.TypeEvaluator in project ElasticDownload by Tibolte.
the class PathAnimatorInflater method setupAnimatorForPath.
/**
* Setup the Animator to achieve path morphing.
*
* @param anim The target Animator which will be updated.
* @param arrayAnimator TypedArray for the ValueAnimator.
* @return the PathDataEvaluator.
*/
private static TypeEvaluator setupAnimatorForPath(ValueAnimator anim, TypedArray arrayAnimator) {
TypeEvaluator evaluator = null;
String fromString = arrayAnimator.getString(R.styleable.Animator_vc_valueFrom);
String toString = arrayAnimator.getString(R.styleable.Animator_vc_valueTo);
PathParser.PathDataNode[] nodesFrom = PathParser.createNodesFromPathData(fromString);
PathParser.PathDataNode[] nodesTo = PathParser.createNodesFromPathData(toString);
if (nodesFrom != null) {
if (nodesTo != null) {
anim.setObjectValues(nodesFrom, nodesTo);
if (!PathParser.canMorph(nodesFrom, nodesTo)) {
throw new InflateException(arrayAnimator.getPositionDescription() + " Can't morph from " + fromString + " to " + toString);
}
} else {
anim.setObjectValues((Object) nodesFrom);
}
evaluator = new PathDataEvaluator(PathParser.deepCopyNodes(nodesFrom));
} else if (nodesTo != null) {
anim.setObjectValues((Object) nodesTo);
evaluator = new PathDataEvaluator(PathParser.deepCopyNodes(nodesTo));
}
if (DBG_ANIMATOR_INFLATER && evaluator != null) {
Log.v(LOG_TAG, "create a new PathDataEvaluator here");
}
return evaluator;
}
use of com.nineoldandroids.animation.TypeEvaluator in project ElasticDownload by Tibolte.
the class PathAnimatorInflater method parseAnimatorFromTypeArray.
/**
* @param anim The animator, must not be null
* @param arrayAnimator Incoming typed array for Animator's attributes.
* @param arrayObjectAnimator Incoming typed array for Object Animator's
* attributes.
*/
private static void parseAnimatorFromTypeArray(ValueAnimator anim, TypedArray arrayAnimator, TypedArray arrayObjectAnimator) {
long duration = arrayAnimator.getInt(R.styleable.Animator_android_duration, 300);
long startDelay = arrayAnimator.getInt(R.styleable.Animator_android_startOffset, 0);
int valueType = arrayAnimator.getInt(R.styleable.Animator_vc_valueType, 0);
TypeEvaluator evaluator = null;
// Must be a path animator by the time I reach here
if (valueType == VALUE_TYPE_PATH) {
evaluator = setupAnimatorForPath(anim, arrayAnimator);
} else {
throw new IllegalArgumentException("target is not a pathType target");
}
anim.setDuration(duration);
anim.setStartDelay(startDelay);
if (arrayAnimator.hasValue(R.styleable.Animator_android_repeatCount)) {
anim.setRepeatCount(arrayAnimator.getInt(R.styleable.Animator_android_repeatCount, 0));
}
if (arrayAnimator.hasValue(R.styleable.Animator_android_repeatMode)) {
anim.setRepeatMode(arrayAnimator.getInt(R.styleable.Animator_android_repeatMode, ValueAnimator.RESTART));
}
if (evaluator != null) {
anim.setEvaluator(evaluator);
}
if (arrayObjectAnimator != null) {
setupObjectAnimator(anim, arrayObjectAnimator);
}
}
Aggregations