如何在android中制作随机帧动画?

2024-01-29

我有许多动画图像(帧),例如 image_1、image_2 和 image_3。我想在我的应用程序中使用这个动画图像,所以我尝试了

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/image_1"
        android:duration="2000"/>
    <item
        android:drawable="@drawable/image_2"
        android:duration="50"/>
     <item
        android:drawable="@drawable/image_3"
        android:duration="50"/>

</animation-list>

并将其设置为我的布局的背景

 public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus){

        final AnimationDrawable bgDrawable = (AnimationDrawable) ((LinearLayout) findViewById(R.id.animationLayout))
                .getBackground();
        ((LinearLayout) findViewById(R.id.animationLayout))
                .post(new Runnable() {

                    @Override
                    public void run() {
                        bgDrawable .start();
                    }
                });

        }
    }
}

但这表明动画每次都以相同的顺序重复。我想做一个random frame animation通过使用这些图像。我该怎么做?

提前致谢


您可以创建一个新的AnimationDrawable无需将 XML 绑定到它,只需手动创建框架并将它们添加到AnimationDrawable.

AnimationDrawable animationDrawable = new AnimationDrawable();

animationDrawable.addFrame("You BitmapDrawable for first frame", 2000);
animationDrawable.addFrame("You BitmapDrawable for second frame", 50);
animationDrawable.addFrame("You BitmapDrawable for third frame", 50);

那里有一个很好的教程:

  • 关键帧动画 http://graphics-geek.blogspot.se/2013/02/devbytes-keyframe-animations.html
  • 程序化逐帧动画示例 http://androidforums.com/application-development/11620-programmatic-frame-frame-animation-examle-animationdrawable.html.

Update:

您可以有一个功能来重置AnimationDrawable并在您的特定时间随机填写。这只是一个伪代码,因此请使用正确的语法根据您的需要进行调整:

public AnimationDrawable shuffleFrame(AnimationDrawable ad) {

    ad = null;
    ad = new AnimationDrawable();

    // Create your Drawable frames here
    ...

    // For each Drawable, pick a random one here and add the frame
    ...
    ad.addFrame(Randomly picked frame, duration);


    return ad;
}

每次想要打乱帧时调用此函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中制作随机帧动画? 的相关文章

随机推荐

  • IE11框架通知栏保存按钮

    在装有 MS Excel 2010 和 IE11 的 64 位系统上 我使用此代码自动从网站下载过程 hWnd FindWindowEx IE hWnd 0 Frame Notification Bar vbNullString If hW
  • 如何将文件读入整数数组

    在我的应用程序文档文件夹中 我有一个文件 我试图将其逐字节读入数组UInt8其中每个元素代表一个字节 我该怎么做呢 该文件恰好名为 Q1 dat 这是我不成功的尝试 func readArray gt Int if let arrayPat
  • 使用 angular2 显示/隐藏密码文本

    我想根据用户点击显示 隐藏密码文本 但我收到以下错误消息 export class App password secret show false ContentChild ShowHideInput input ShowHideInput
  • 同一手臂上不同类型的模式匹配

    我想知道当两个或多个不同的枚举类型具有相同的数据成员或相同的函数时 是否有一种方法可以简化以下模式匹配臂 如果没有 最好解释一下原因 UPDATE 根据要求提供我想要的更准确的示例 请原谅我将数据成员访问与函数混淆 struct Point
  • Hibernate 验证器:@Email 接受ask@stackoverflow 为有效吗?

    我正在使用 Email用于验证电子邮件地址的注释 我遇到的问题是它接受诸如ask stackoverflow作为有效的电子邮件地址 我想这是因为他们想支持 Intranet 地址 但我似乎找不到标志 所以它确实检查扩展名 我真的需要切换到
  • 将 ListView 绑定到 ListProperty

    在tornadoFX中是否可以将ListView绑定到ListProperty 我有一个如下所示的 ViewModel class MyVm ItemViewModel
  • 使用带有 nginx 的 React 路由器应用程序获取 404 [重复]

    这个问题在这里已经有答案了 我有一个反应前端应用程序 它使用反应路由器来创建不同的路线 在开发服务器上它工作正常 但是当我构建项目时 它给我 404 同时直接使用不同的路由访问它 网站完美打开xyz net 当我尝试使用以下命令访问它时 它
  • 使用 ssh 访问存储库

    昨天我发现了 git 这样的东西的存在 我需要使用 ssh 访问远程存储库 我使用了命令 git clone email protected cdn cgi l email protection email protected cdn cg
  • 用于创建事件处理程序存根的 Visual Studio 键盘快捷键

    当您在设计视图中编辑简单页面时 只需双击相关事件即可在大多数组件上添加事件 这将完成绑定并在代码隐藏中为您生成函数声明 在页面复杂的大型项目中 设计视图可能会非常慢 有没有一种方法可以直接从代码快速生成代码隐藏存根 aspx source
  • linq Last() 如何确定最后一项?

    我不明白 Current 如何可以为 null 而 LINQ 函数 Last 可以返回一个对象 我认为 Last 使用 GetEnumerator 并一直持续到 current null 并返回对象 然而 正如您所看到的 第一个 GetEn
  • 如果值匹配,则自动比较 2 个 csv 文件的值,将第二个 csv 读入 DataFrame

    我已将 Excel 导入到数据框中 它看起来像这样 然后我使用代码根据 tx id 对这些数据进行分组 并使用 tx id 的名称创建单独的 csv 这给了我这样的数据 3e6737ae c3af 4d19 a645 d17fc73dbb7
  • Java 基准测试 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在使用 perlbench pybench 和 php bench 等标准基准测试工具对 Per
  • 从 commons.lang 迁移 StringEscapeUtils.escapeSql

    我已经开始将 commons lang 2 迁移到 commons lang3 根据https commons apache org proper commons lang article3 0 html https commons apa
  • XSLT 复制除 1 个元素之外的所有节点

  • 在 Coq 中使用依赖类型(安全第 n 个函数)

    我正在尝试学习 Coq 但我发现很难从我读到的内容中实现飞跃软件基础 and 依赖类型的认证编程到我自己的用例 特别是 我想我应该尝试制作一个经过验证的版本nth列表上的函数 我设法写了这个 Require Import Arith Req
  • 在 macOS 上安装 Homebrew

    根据 Homebrew 网站 要安装它 我需要输入 brew install wget 我收到一条错误消息 bash brew command not found Found 这个答案 https stackoverflow com que
  • 在 Rails 中验证两个表的唯一性时如何避免竞争条件

    这个问题 https stackoverflow com questions 21012826 validating uniqueness across two tables讨论验证两个表之间的唯一性 并且接受的答案提到 这种代码级唯一约束
  • 如何在 Asp.net 按钮单击后从 C# 代码调用 javascript 函数?

    我想从后面的代码调用我的 facebook 发送对话框函数 JavaScript 代码是 function facebook send message to FB ui app id method send name link to des
  • 在谷歌地图 V3 中显示 .gif 图像标记

    Google 地图 V2 支持所有 gif 图像标记在地图中显示 现在我正在从 V2 迁移到 gwt maps 3 8 0 其中 gif 标记显示为常量标记 我发现了一些类似的问题 但没有得到我正在寻找的确切内容 String iconNa
  • 如何在android中制作随机帧动画?

    我有许多动画图像 帧 例如 image 1 image 2 和 image 3 我想在我的应用程序中使用这个动画图像 所以我尝试了