manera más flexible (y bastante fácil) para crear animaciones personalizadas es extender Animation
clase.
En general:
- duración establecida de la animación usando
setDuration()
método.
- Opcionalmente establece el interpolador para su animación usando
setInterpolator()
(por exapmle puede utilizar LinearInterpolator
o AccelerateInterpolator
etc.)
- Anulación
applyTransformation
método. Aquí nos interesa la variable interpolatedTime
que cambia entre 0.0 y 1.0 y representa el progreso de tu animación.
Aquí es un ejemplo (estoy usando esta clase de cambiar ofsset de mi Bitmap
Bitmap
mismo se dibuja en draw
método.):
public class SlideAnimation extends Animation {
private static final float SPEED = 0.5f;
private float mStart;
private float mEnd;
public SlideAnimation(float fromX, float toX) {
mStart = fromX;
mEnd = toX;
setInterpolator(new LinearInterpolator());
float duration = Math.abs(mEnd - mStart)/SPEED;
setDuration((long) duration);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
float offset = (mEnd - mStart) * interpolatedTime + mStart;
mOffset = (int) offset;
postInvalidate();
}
}
También puede modificar mediante el uso de View
Transformation#getMatrix()
.
ACTUALIZACIÓN
En caso si usted está utilizando el framework de Android animador (o compatibilidad aplicación - NineOldAndroids
) puede declarar setter y getter para su propiedad personalizada View
y animar directamente. Aquí hay otro ejemplo:
public class MyView extends View {
private int propertyName = 50;
/* your code */
public int getPropertyName() {
return propertyName;
}
public void setPropertyName(int propertyName) {
this.propertyName = propertyName;
}
/*
There is no need to declare method for your animation, you
can, of course, freely do it outside of this class. I'm including code
here just for simplicity of answer.
*/
public void animateProperty() {
ObjectAnimator.ofInt(this, "propertyName", 123).start();
}
}
[Personalizar animación en Android] (http://www.singhajit.com/android-custom-animations/) –
@AjitSingh, que en el artículo se describen las animaciones estándar (rotación, traslación, etc.). Lo que estoy preguntando aquí es animaciones personalizadas. – aioobe