2011-09-05 47 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