热门标签 | 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);
}


完毕

源码在这里






推荐阅读
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 我有一个非常有效的多列布局,用于以平铺格式展示图片等元素。然而,我希望这些元素能够按照时间顺序排列。虽然可以通过查询按最后修改时间获取数据,但当前的布局仍然按列进行排序。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • Flowable 流程图路径与节点展示:已执行节点高亮红色标记,增强可视化效果
    在Flowable流程图中,通常仅显示当前节点,而路径则需自行获取。特别是在多次驳回的情况下,节点可能会出现混乱。本文重点探讨了如何准确地展示流程图效果,包括已结束的流程和正在执行的流程。具体实现方法包括生成带有高亮红色标记的图片,以增强可视化效果,确保用户能够清晰地了解每个节点的状态。 ... [详细]
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社区 版权所有