English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Todos sabemos que en Android, hay dos tipos comunes de animaciones: una es la animación de cuadros (Frame Animation), y la otra es la animación de interpolación (Tween Animation). La animación de cuadros proporciona una forma de reproducir imágenes frame por frame, reproduciendo imágenes hechas previamente, similar al principio de las imágenes gif, como si estuvieras viendo una película. La animación de interpolación puede lograr efectos como el movimiento, el aumento, la disminución y la transición de los componentes de View.
Hoy vamos a imitar el efecto de diálogo de animación de小人corriendo que se carga en Meituan, llamémosle Running Man, ¡corre, hermano! Sin más preámbulos, aquí tienes la imagen de efecto, déjame que los grandes maestros vean si es el efecto que desean lograr, y luego decidan si continúan leyendo, porque como programadores, nuestro tiempo es muy valioso, después de todo, ni siquiera tenemos novia?
(ps:由于技术原因,提供的动态图效果不是很明显,但在手机上运行是非常好的,有兴趣的朋友可以下载源码查看。)
下面讲解实现的原理,首先我们在项目的res目录下新建一个anim文件夹,然后新建一个xml文件,添加如下代码:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android android:oneshot="false" > <item android:drawable="@drawable/app_loading0" android:duration="150"/> <item android:drawable="@drawable/app_loading1" android:duration="150"/> </animation-list>
animation-list 是动画列表,中间放很多的item 也就是组成帧动画的图片,
android:drawable[drawable]//加载Drawable对象
android:duration[long]//每一帧动画的持续时间(单位ms)
android:oneshot[boolean]//动画是否只运行一次,true运行一次,false重复运行
完成之后我们来看如何自定义一个对话框,以实现打开对话框时,自动加载奔跑的动画。见代码:
/** * @Description: 自定义对话框 * @author http://blog.csdn.net/finddreams */ public class CustomProgressDialog extends ProgressDialog { private AnimationDrawable mAnimation; private Context mContext; private ImageView mImageView; private String mLoadingTip; private TextView mLoadingTv; private int count = 0; private String oldLoadingTip; private int mResid; public CustomProgressDialog(Context context, String content, int id) { super(context); this.mContext = context; this.mLoadingTip = content; this.mResid = id; setCanceledOnTouchOutside(true); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); } private void initData() { mImageView.setBackgroundResource(mResid); // Obtener el AnimationDrawable que se muestra en el fondo a través del objeto ImageView mAnimation = (AnimationDrawable) mImageView.getBackground(); // Una de las soluciones para evitar que solo se muestre el primer cuadro en el método onCreate mImageView.post(new Runnable() { @Override public void run() { mAnimation.start(); } }); mLoadingTv.setText(mLoadingTip); } public void setContent(String str) { mLoadingTv.setText(str); } private void initView() { setContentView(R.layout.progress_dialog); mLoadingTv = (TextView) findViewById(R.id.loadingTv); mImageView = (ImageView) findViewById(R.id.loadingIv); } }
Se puede ver que en el código, utilizamos el método imageview.post(Runnable r), ya que el animación de cuadros requiere que se dibuje continuamente, por lo que debe ejecutarse en un hilo, de lo contrario solo se verá el primer cuadro, lo que es igual a la principio que utilizamos al hacer juegos, el movimiento de un personaje es controlado por un hilo que dibuja continuamente la imagen.
Por supuesto, hay otro método que también puede realizarse:
@Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-método de plantilla generado mAnimation.start(); super.onWindowFocusChanged(hasFocus); }
Por último, se llama en Activity, detalles:
CustomProgressDialog dialog = new CustomProgressDialog(this, "Cargando", R.anim.frame); dialog.show();
Para el CustomProgressDialog, una clase de cuadro de diálogo personalizado bien encapsulada, es muy fácil de llamar, puede cambiar rápidamente al efecto deseado, solo necesita cambiar la imagen.
Esto es todo el contenido de este artículo. Si tiene alguna pregunta después de la prueba, puede dejar sus comentarios en la sección de comentarios a continuación. Gracias por su apoyo a la guía de gritos.
Declaración: el contenido de este artículo se obtiene de la red, pertenece al propietario original, el contenido se contribuye y carga espontáneamente por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de copyright, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez verificado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.