如何调用原始目录中的多个动画之一
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);
我正在尝试使用随机数生成器从 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);