Android结合xml实现帧动画

 更新时间:2021年05月22日 09:48:26   作者:早起的年轻人  
将一组动作相近的图片组合在一起,然后按照一定的时间来播放,就会形成一个动画,我们可以称之为帧动画。在 Android 中可通过结合 xml 的方式来轻松实现。

1 创建 xml 动画文件

在 Android 项目工程中的 drawable 目录下创建动画文件,如我这里创建的 loading.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="@mipmap/ani_1"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_2"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_3"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_4"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_5"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_6"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_7"
        android:duration="800" />
    <item
        android:drawable="@mipmap/ani_8"
        android:duration="800" />
</animation-list>

设置android:oneshot属性为true,表示此次动画只执行一次,最后停留在最后一帧。设置为false则动画循环播放。文件可以添加为Image背景,触发的时候播放。

2 加载使用

在你的 Activity 中,直接将这个动画文件使用一个 ImageView 来加载显示,代码如下:

public class MainActivity extends AppCompatActivity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		ImageView lImageView = findViewById(R.id.imageview);
		//设置图片
		lImageView.setImageResource(R.drawable.loading);
		//动
		AnimationDrawable lAnimationDrawable = (AnimationDrawable) lImageView.getDrawable();
		
		lAnimationDrawable.start();
		
	}
}

3 聊一聊 AnimationDrawable

Drawable animation可以加载Drawable资源实现帧动画。AnimationDrawable是实现Drawable animations的基本类

有时 调用了 AnimationDrawable.start方法来启动动画,但是并没有出现效果。

3.1 使用 ViewTreeObserver

ViewTreeObserver.OnPreDrawListener lOnPreDrawListener=new ViewTreeObserver.OnPreDrawListener(){
	@Override
	public boolean onPreDraw() {
		lAnimationDrawable.start();
		return true; //注意此行返回的值
	}
};

//绑定视图观察者
lImageView.getViewTreeObserver().addOnPreDrawListener(lOnPreDrawListener);

3.2 使用 RunAnim

public class MainActivity extends AppCompatActivity {
	

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		start3();
	}

	private AnimationDrawable mAnimationDrawable;
	
	public void start3() {
		ImageView lImageView = findViewById(R.id.imageview);
		//设置图片
		lImageView.setImageResource(R.drawable.loading);
		//动
		mAnimationDrawable = (AnimationDrawable) lImageView.getDrawable();
		
		RunAnim runAnim = new RunAnim();
		runAnim.execute("");
		
		
	}
	
	class RunAnim extends AsyncTask<String, String, String> {
		@Override
		protected String doInBackground(String... params) {
			if (!mAnimationDrawable.isRunning()) {
				mAnimationDrawable.stop();
				mAnimationDrawable.start();
			}
			return "";
		}
	}
}

3.3 在 Activity 的 onWindowFocusChanged 中调用

@Override
public void onWindowFocusChanged(boolean hasFocus)
{
	mAnimationDrawable.start();
	super.onWindowFocusChanged(hasFocus);
}

完毕

源码在这里

以上就是Android结合xml实现帧动画的详细内容,更多关于Android 实现帧动画的资料请关注脚本之家其它相关文章!

相关文章

  • Android 基础入门教程——开发环境搭建

    Android 基础入门教程——开发环境搭建

    这篇文章主要介绍了Android 如何搭建开发环境,文中讲解非常细致,帮助大家开始学习Android,想要学习Android的朋友可以了解下
    2020-06-06
  • Jetpack Compose修饰符专项精讲

    Jetpack Compose修饰符专项精讲

    在今年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明式的UI框架,它可简化并加快Android上的界面开发,使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩
    2022-10-10
  • AndroidStudio3.6的卸载安装,Gradle持续下载/Gradle Build失败等问题

    AndroidStudio3.6的卸载安装,Gradle持续下载/Gradle Build失败等问题

    这篇文章主要介绍了AndroidStudio3.6的卸载安装,Gradle持续下载/Gradle Build失败等问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Android EditText限制输入字符的方法总结

    Android EditText限制输入字符的方法总结

    这篇文章主要介绍了 Android EditText限制输入字符的方法总结的相关资料,这里提供了五种方法来实现并进行比较,需要的朋友可以参考下
    2017-07-07
  • android Socket实现简单聊天小程序

    android Socket实现简单聊天小程序

    这篇文章主要为大家详细介绍了android Socket实现简单聊天小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Flutter质感设计之直接输入

    Flutter质感设计之直接输入

    这篇文章主要为大家详细介绍了Flutter质感设计之直接输入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 深入分析Android NFC技术 android nfc开发

    深入分析Android NFC技术 android nfc开发

    本篇文章我们对android开发中nfc技术做了全面的原理分析以及实现过程,需要的读者们一起参考一下吧。
    2017-11-11
  • Android开发入门之Service用法分析

    Android开发入门之Service用法分析

    这篇文章主要介绍了Android中Service用法,较为详细的分析了Service的功能、相关函数使用及注意事项,需要的朋友可以参考下
    2016-07-07
  • Android数据共享 sharedPreferences 的使用方法

    Android数据共享 sharedPreferences 的使用方法

    这篇文章主要介绍了Android数据共享 sharedPreferences 的使用方法的相关资料,希望通过本文能帮助到大家,让大家理解使用sharedpreferences,需要的朋友可以参考下
    2017-10-10
  • Android视频点播的实现代码(边播边缓存)

    Android视频点播的实现代码(边播边缓存)

    本篇文章主要结合了Android视频点播的实现代码(边播边缓存),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论