我开发了一个具有逐帧动画的应用程序。我从drawable文件夹获取资源。所以我的apk的大小是巨大的。现在我想从服务器获取资源,但我无法想出这样做的想法。 我把我的代码放在这里
main.xml ::
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView android:id="@+id/simple_anim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerHorizontal="true"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, XMLAnimation"
/>
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>
frame_animation_girl.xml ::
<animation-list xmlns:android=
"http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/girl0001" android:duration="20" />
<item android:drawable="@drawable/girl0002" android:duration="20" />
<item android:drawable="@drawable/girl0003" android:duration="20" />
<item android:drawable="@drawable/girl0004" android:duration="20" />
<item android:drawable="@drawable/girl0005" android:duration="20" />
<item android:drawable="@drawable/girl0006" android:duration="20" />
</animation-list>
Java文件::
ImageView img = (ImageView) findViewById(R.id.simple_anim);
img.setBackgroundResource(R.drawable.frame_animation_girl);
MyAnimationRoutine mar = new MyAnimationRoutine();
MyAnimationRoutine2 mar2 = new MyAnimationRoutine2();
Timer t = new Timer(false);
t.schedule(mar, 100);
Timer t2 = new Timer(false);
t2.schedule(mar2, 5000);
Buttona = (Button) findViewById(R.id.button1);
final Intent animationIntent = new Intent(this, TranningIntent.class);
Buttona.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(animationIntent);
finish();
}
});
}
class MyAnimationRoutine extends TimerTask {
MyAnimationRoutine() {
}
public void run() {
ImageView img = (ImageView) findViewById(R.id.simple_anim);
// Get the background, which has been compiled to an
// AnimationDrawable object.
AnimationDrawable frameAnimation = (AnimationDrawable) img
.getBackground();
// Start the animation (looped playback by default).
frameAnimation.start();
}
}
class MyAnimationRoutine2 extends TimerTask {
MyAnimationRoutine2() {
}
public void run() {
ImageView img = (ImageView) findViewById(R.id.simple_anim);
// Get the background, which has been compiled to an
// AnimationDrawable object.
AnimationDrawable frameAnimation = (AnimationDrawable) img
.getBackground();
// stop the animation (looped playback by default).
/* frameAnimation.stop(); */
}
}
}
答案 0 :(得分:1)
我认为这取决于你想要做什么,以及你的动画是什么。一些更简单的动画(例如旋转)你可以通过动画单个drawable来逃脱,可能允许你存储更少的资产。如果您正在处理非常复杂的动画和可能的许多资产,您可以始终从服务器返回可由客户端逻辑解释为动画的数据(不是通过xml)。
在此线程中还有一些关于在运行时使用XML文件的讨论: Download and replace Android resource files
答案 1 :(得分:0)
我通过::
解决了这个问题ImageView img = (ImageView) findViewById(R.id.simple_anim);
animation = new AnimationDrawable();
try {
for(int i=0;i<54;i++)
{
xyz("girl000",i);
}
animation.setOneShot(false);
} catch (Exception e) {
}
img.setBackgroundDrawable(animation);
img.post(new Starter());
}
public void xyz(String str,int x)
{
try {
Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(
"http://sdfsdffff/MRESC/images/test/girl/"+"girl000"+x+".png")
.getContent());
Drawable frame =new BitmapDrawable(bitmap);
animation.addFrame(frame, 50);
} catch (Exception e) {
}
}
class Starter implements Runnable {
public void run() {
animation.start();
}
}