从服务器获取动画资源

时间:2011-09-01 06:00:28

标签: android

我开发了一个具有逐帧动画的应用程序。我从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(); */
        }
    }
}

2 个答案:

答案 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();        
        }


    }