2011-09-05 52 views
0

我对“AnimationDrawable not change frames”一段时间的问题感到困惑。我确认我已经将所需的所有框架添加到了AnimationDrawable对象中,并且我调用了start() ,并且我调用isRunning()的结果为true,但AnimationDrawable无法更改框架。AnimationDrawable not change frames

尽管被调用的start()处于onResume()状态,但我在MainActivity的处理程序中调用了start(),而不是在onCreate()或onResume()中。

感谢您的想法。

----^_^banlalaotou。

添加的代码有问题。

public class MainActivity extends Activity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ma = new Ma(this); 
     ablt = ma.ablt; 
     setContentView(ablt); 

     mt = new MinorThread(this); 
     new Thread(mt).start(); 

     while(true){ 
      if(mt.mHandler==null) continue; 
      else{ 
       Message msg = new Message(); 
       mt.mHandler.sendMessage(msg); 
       break; 
      } 
     } 
    } 

    Handler handler = new Handler(){ 
     @Override 
     public void handleMessage(Message msg) { 
      ma.control(); 
      Message msg1 = new Message(); 
      mt.mHandler.sendMessage(msg1); 
     } 
    }; 

    @Override 
    public boolean onKeyDown(int keyCode,KeyEvent event){ 
     switch(keyCode){ 
     case KeyEvent.KEYCODE_BACK: 
      System.exit(0); 
     } 
     return true; 
    } 

    private MinorThread mt = null; 
    private ImageView v1 = null; 
    private Ma ma = null; 
    private int x = 0; 
    private int y = 0; 
    private int width = 0; 
    private int height = 0; 
    private AbsoluteLayout ablt = null; 
} 

    class MinorThread implements Runnable{ 

    @Override 
    public void run() { 

     Looper.prepare(); 
     mHandler = new Handler(){ 
      @Override 
      public void handleMessage(Message msg){ 
       Message msg2 = new Message(); 
       mainActivity.handler.sendMessage(msg2); 
       try { 
        Thread.sleep(3000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     Looper.loop(); 
    } 

    public MinorThread(MainActivity mainAcitivy){ 
     this.mainActivity = mainAcitivy; 
    } 

    private MainActivity mainActivity = null; 
    public Handler mHandler = null; 
} 

    class Ma{ 

public Ma(MainActivity context){ 

     ablt = new AbsoluteLayout(context); 
     TestView v = new TestView(context); 
     AbsoluteLayout.LayoutParams lp = new LayoutParams(480,320,0,0); 
     ablt.addView(v, lp); 
     Drawable d = null; 


     ad = new AnimationDrawable(); 
     d = context.getResources().getDrawable(R.drawable.f1); 
     ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f2); 
     ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f3); 
     ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f4); 
     ad.addFrame(d, 100); d = context.getResources().getDrawable(R.drawable.f5); 
     ad.addFrame(d, 100); 

     v1 = new ImageView(context); 
     v1.setImageDrawable(ad); 

     String tag = "test"; 
     v1.setTag(tag); 

     ablt.addView(v1, new LayoutParams(100, 40, 20, 20)); 
    } 

    public void control(){ 

     v1 = (ImageView) ablt.findViewWithTag("test"); 
     if(x<480&&y<320){ 
      x+=10; 
      y+=5; 
      v1.layout(x, y, x+100, y+40); 
      AnimationDrawable ad = (AnimationDrawable)v1.getDrawable(); 
      ad.start(); 
     } 
    } 

    public AbsoluteLayout ablt = null; 
    private AnimationDrawable ad = null; 
    private ImageView v1 = null; 
    private int x = 0; 
    private int y = 0; 
    private int width = 0; 
    private int height = 0; 
} 


    class TestView extends View{ 

    public TestView(Context context) { 
     super(context); 
    } 

    @Override 
    public void onDraw(Canvas canvas){ 
     paint.setColor(Color.WHITE); 
     canvas.drawRect(0,0,480,320, paint); 
    } 

    private Paint paint = new Paint(); 
} 

I'sorry不上传的框架,因为我的名声小于10 如果你执行的代码,你需要找到一些图片,让动画运行。

谢谢。

=============================

现在,我知道如何让结果表明,但我无法知道这件事。

问题的解决方案是,在显示所有ImageView之前将ImageView对象添加到布局对象中,并且“添加ImageView ...”和“显示所有ImageView”不能在一个函数。正确的方法就像“if(..){add ImageView} else {show the all ImageView}”。

尽管这种方法可以解决我想要解决的问题,但为什么Android不能在第一时间显示所有ImageView的动画呢?

回答

0

尝试使用start()onWindowFocusChange(boolean focus)当焦点是真实的。

+0

我在MainActivity的handleMessage中调用了onWindowFocusChange(),但我没有知道为什么结果与我的主代码相同。 – bllt

+0

你能再帮我一次吗? – bllt