如何调用原始目录中的多个动画之一

How to call one of multiple animations in raw directory

我正在尝试使用随机数生成器从 10 种不同的动画中选择一种,然后 运行 使用 Lottie 实现。我已将动画命名为 animation1 到 animation10。像这样直接输入其中一个动画是没有问题的:

animationView.setAnimation(R.raw.animation2);

但是应用程序在这样输入时一直崩溃:

LottieAnimationView animationView = findViewById(R.id.animationViewer);
randNumber = rand.nextInt(10) + 1;

animationView.setAnimation("R.raw.animation" + randNumber);

原因是:

Caused by: java.io.FileNotFoundException: R.raw.animation2

你不能那样做,因为 setAnimation() 需要 ResID 而不是字符串。

相反,您可以像这样使用 Array

<integer-array name="animations">
    <item>@anim/animation1</item>
    <item>@anim/animation2</item>
</integer-array>

然后,您可以使用您的随机数。

您正在尝试将资源 ID 作为字符串发送 您可以创建一个资源数组,或者最简单但不是最干净的方法是:

 animID = when(randNumber){

1 -> {R.raw.animation1} 2 -> {R.raw.animation2} . . . . 10 -> {R.raw.animation10} }

animationView.setAnimation(animID);

发现这是最佳解决方案

Resources resources = context.getResources();
String animationDir = "animation" + randNumber;
final int resourceId = resources.getIdentifier(animationDir, "raw", context.getPackageName());
context.getPackageName();

animationView.setAnimation(resourceId);