Cómo utilizar clases de animación personalizadas en XMLEn el desarrollo de animaciones de aplicaciones de Android, es posible que las animaciones de soporte que vienen con el SDK no satisfagan las necesidades de la aplicación y sea necesario personalizarlas. en el código Java Defina algunas clases de animación, que por supuesto heredan de la clase Animación. Después de la implementación, generalmente lo usamos directamente en el código, similar a lo siguiente: CustomAnimationcustomAnimation = newCustomAnimation (); customAnimation.setDuration (3000); customAnimation.setFillAfter(true); , Alpha, etc. Al complementar la animación, debe agregar más código como el siguiente: CustomAnimationcustomAnimation=newCustomAnimation();customAnimation.setDuration(3000);customAnimation.setFillAfter(true);AnimationscaleAnimation=newScaleAnimation(0f,1f,0f,1f ,Animation.RELATIVE_TO_SELF, 0.5f,Animation.) AnimationalphaAnimation=newAlphaAnimation(0.1f,1.0f);scaleAnimation.setDuration(10000);alphaAnimation.setDuration(10000); AnimationSetset=newAnimationSet(true);set.;set.addAnimation( customAnimation);set. addAnimation(scaleAnimation);set.addAnimation(alphaAnimation);set.setFillAfter(true);set.setFillEnabled(true);effectView.startAnimation(set);Si coloca todas las animaciones de relleno necesarias (incluidas las clases de animación personalizadas) ) directamente Una colección en xml, las cosas no parecerán tan complicadas. Las cosas no parecerán tan complicadas. Definir una buena animación configurada en xml tiene dos beneficios: se requiere menos código Java para usar animaciones y el aspecto general es más limpio. El uso de la definición xml puede hacer que las propiedades de la animación sean claras de un vistazo y más concentradas, lo que facilita su lectura y mantenimiento. Primero, defina una animación configurada en xml de la siguiente manera: R.anim.my_anim_setmyapp:customProp2="30 "myapp:customProp3="50%"android:duration="400 "android:fillAfter="true"/>Luego, seguimos sentido común y cargue el conjunto de animaciones xml que definimos en código Java de esta manera: AnimationSetset=(AnimationSet)AnimationUtils.loadAnimation(this,R.anim.my_anim_set); El código anterior no se puede ejecutar correctamente y el programa en ejecución finalizará directamente.
¿Por qué? Al observar el código fuente de AnimationUtils.loadAnimation, sabemos que al cargar clases de animación desde xml, solo reconoce las clases de animación que vienen con el SDK, como alfa, escalar, rotar y traducir. Sin embargo, cuando escribimos una animación personalizada. clase CustomAnimation, se informará una excepción de nombre de animación desconocido. El SDK oficial no proporciona ningún otro método API para resolver este problema, entonces, ¿cómo solucionarlo? En realidad, es muy simple: simplemente modifique una línea en el código fuente original AnimationUtils.loadAnimation y cargue la clase de animación personalizada desde ClassLoader. Copie el código fuente e implemente su propio método loadAnimation de la siguiente manera: OptAnimationLoader.javapublicclassOptAnimationLoader{publicstaticAnimationloadAnimation(Contextcontext,intid)throwsResources.NotFoundException{XmlResourceParserparser=null;try{parser=context.getResources().getAnimation(id);returncreateAnimationFromXml(context , analizador);}catch(XmlPullParserExceptionex){Resources.NotFoundExceptionrnf=newResources.NotFoundException("¿No se puede?NotFoundException("No se puede cargaranimationresourceID#0x "+Integer.toHexString(id));rnf.initCause(ex);throwrnf; } catch(IOExceptionex){Resources.NotFoundExceptionrnf=Nuevos recursos.