PDA

Ver la Versión Completa : Duda con ObjectAnimator


manolazo
22/04/13, 00:35:29
Buenas, estoy jugando un poco con la clase ObjectAnimator pero hay cosas que no salen o no entiendo muy bien.

Un ejemplo es este codigo el cual me da un error Fatal exception main:
java.lang.NosuchFieldError: android.view.View.ALPHA


public class PropertyAnimations extends Activity{
CheckBox mCheckBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Button alphaButton = (Button) findViewById(R.id.alphaButton);

ObjectAnimator alphaAnimation = ObjectAnimator.ofFloat(alphaButton,
View.ALPHA, 0);
alphaAnimation.setRepeatCount(1);
alphaAnimation.setRepeatMode(ValueAnimator.REVERSE );
alphaAnimation.start();
}
}



Un saludo.

EDITO:
Hola,
Es curioso, si ejecuto la aplicacion con el AVD me da el error indicado, pero si uso el galaxy s3 me corre sin problemas. ¿ A que se debe?

kriogeN
22/04/13, 08:46:28
Para poder usar ObjectAnimator necesitas como mínimo HoneyComb (y para algunas cosas concretas ICS). En el AVD tendrás configurado una versión anterior a HoneyComb, mientras que en el S3 si que tienes como mínimo ICS.

Y en el caso concreto de la propiedad ALPHA, necesitas ICS.

Si necesitas usar tu programa en versiones anteriores a ICS y quieres seguir usando las animaciones, usa NineOldAndroids:

http://nineoldandroids.com/

manolazo
22/04/13, 20:50:56
hoila,
No me di cuenta que tenia puesto un avd con una versión anterior a ICS , ahora con el mas nuevo funciona correctamente.

Pero surge otra duda respecto a ObjectAnimator y Keyframe:


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final Button rotateButton = (Button) findViewById(R.id.rotateButton);

ObjectAnimator rotateAnimation = ObjectAnimator.ofFloat(rotateButton , View.ROTATION, 180);

rotateAnimation.start();
}


En este caso si funciona la animacion una vez se ejecuta.
Pero si usamos Keyframes como en este caso, no rotaria el boton:



Keyframe kf1 = Keyframe.ofFloat(.5f, 180f);
Keyframe kf2= Keyframe.ofFloat(.99f, 45f);
Keyframe kf3 = Keyframe.ofFloat(1f, 195f);
PropertyValuesHolder rotacion= PropertyValuesHolder.ofKeyframe("rotacion", kf1, kf2);
ObjectAnimator rotateAnimation2 = ObjectAnimator.ofPropertyValuesHolder(rotateButton , rotacion);

rotateAnimation2.start();



Por lo que leo , el primer argumento del keyframe es el tiempo del frame y el segundo el valor expresado en floats.

En el caso de abajo quiero qoue rote primero 180 grados y luego 45 por ejemplo . pero no hace nada.

ALguna sugerencia??

EDITO:

Veo que el fallo esta en poner: .ofKeyframe("rotacion", kf1, kf2); en vez de "rotation".

No obstante no veo que varie si se cambia el primer parametro del Keyframe, es decir el tiempo , he probado poner cualquier valor en el primer argumento y no varia nada.

Alguna sugenrencia? gracias.