2011-09-01 54 views
1

我开发了一个具有逐帧动画的应用程序。我从可绘制文件夹获取资源。所以我的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(); */ 
     } 
    } 
} 

回答

1

我认为这取决于你想要做什么,以及你的动画是什么。一些简单的动画(例如旋转)可以通过动画绘制单个drawable来实现,可能允许您存储更少的资源。如果你正在处理非常复杂的动画和潜在的许多资产,你总是可以通过编程方式(不是通过xml)从你的服务器返回可以被客户端逻辑解释为动画的数据。

也有在这个线程使用XML文件在运行时的一些讨论: Download and replace Android resource files

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


    } 
解决这个