热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Android帧动画xml方式实现

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Android帧动画xml方式实现相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Android 帧动画 xml 方式实现相关的知识,希望对你有一定的参考价值。







在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。


如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料。

将一组动作相近的图片组合在一起,然后按照一定的时间来播放,就会形成一个动画,我们可以称之为帧动画。

在这里插入图片描述

android 中可通过结合 xml 的方式来轻松实现。


1 创建 xml 动画文件

在 Android 项目工程中的 drawable 目录下创建动画文件,如我这里创建的 loading.xml
在这里插入图片描述
如以下4张静态图

图片 ani_1 :
在这里插入图片描述
图片 ani_2:
在这里插入图片描述
图片 ani_3:
在这里插入图片描述
图片 ani_4:
在这里插入图片描述


<animation-list xmlns:android&#61;"http://schemas.android.com/apk/res/android"
android:oneshot&#61;"false"
>

<item
android:drawable&#61;"&#64;mipmap/ani_1"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_2"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_3"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_4"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_5"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_6"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_7"
android:duration&#61;"800" />

<item
android:drawable&#61;"&#64;mipmap/ani_8"
android:duration&#61;"800" />

animation-list>

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


2 加载使用

在你的 Activity 中&#xff0c;直接将这个动画文件使用一个 ImageView 来加载显示&#xff0c;代码如下&#xff1a;

public class MainActivity extends AppCompatActivity {

&#64;Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ImageView lImageView &#61; findViewById(R.id.imageview);
//设置图片
lImageView.setImageResource(R.drawable.loading);
//动
AnimationDrawable lAnimationDrawable &#61; (AnimationDrawable) lImageView.getDrawable();

lAnimationDrawable.start();

}
}

动起来的效果是这样的

在这里插入图片描述


3 聊一聊 AnimationDrawable

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

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


3.1 使用 ViewTreeObserver

ViewTreeObserver.OnPreDrawListener lOnPreDrawListener&#61;new ViewTreeObserver.OnPreDrawListener(){
&#64;Override
public boolean onPreDraw() {
lAnimationDrawable.start();
return true; //注意此行返回的值
}
};
//绑定视图观察者
lImageView.getViewTreeObserver().addOnPreDrawListener(lOnPreDrawListener);

3.2 使用 RunAnim

public class MainActivity extends AppCompatActivity {


&#64;Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

start3();
}
private AnimationDrawable mAnimationDrawable;

public void start3() {
ImageView lImageView &#61; findViewById(R.id.imageview);
//设置图片
lImageView.setImageResource(R.drawable.loading);
//动
mAnimationDrawable &#61; (AnimationDrawable) lImageView.getDrawable();

RunAnim runAnim &#61; new RunAnim();
runAnim.execute("");


}

class RunAnim extends AsyncTask<String, String, String> {
&#64;Override
protected String doInBackground(String... params) {
if (!mAnimationDrawable.isRunning()) {
mAnimationDrawable.stop();
mAnimationDrawable.start();
}
return "";
}
}
}

3.3 在 Activity 的 onWindowFocusChanged 中调用

&#64;Override
public void onWindowFocusChanged(boolean hasFocus)
{
mAnimationDrawable.start();
super.onWindowFocusChanged(hasFocus);
}


完毕

源码在这里






推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
author-avatar
mobiledu2502936307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有