2012-02-08 94 views
2

請幫助 我有3個ImageViews,我可以使用3個Runnables將TranslateAnimation移動3個視圖。 這裏是我的代碼:動態創建Runnables

private Runnable run1= new Runnable() { 
    public void run() { 
     if(t1) 
     { 
      LayoutParams params1=(LayoutParams) l1.getLayoutParams(); 
      params1.x=x1; 
      params1.y=y1; 
      l1.setLayoutParams(params1); 
      x2=r.nextInt(720-80)+80; 
      y2=r.nextInt(400-80)+80; 

     TranslateAnimation ta1 = new TranslateAnimation(0, x2-x1, 0, y2-y1); 
     ta1.setDuration(800); 
     ta1.setFillAfter(true); 
     l1.startAnimation(ta1); 
     x1=x2; 
     y1=y2; 

     handler.postDelayed(run1, 800); 

     } 
    } 

}; 然後我有RUN2,RUN3這樣的,並通過在OnCreate中

主叫

this.runOnUiThread(run1); 
    this.runOnUiThread(run2); 
    this.runOnUiThread(run3); 

運行它們

然後,我有陣列與詮釋三ImageViews(如c = 10,則c = 20 ...)

for(j=0;j<c;j++)  
    { 

     mp[j] = MediaPlayer.create(getApplicationContext(), soundArray[i[j]]); 
     images[j]=new ImageView(getBaseContext()); 
     lp[j]=new LayoutParams(50,50, x1[j], y1[j]); 
     images[j].setLayoutParams(lp[j]); 
     images[j].setBackgroundResource(imgArray[i[j]]); 
     images[j].setId(j); 
     images[j].setOnClickListener((OnClickListener)this); 
     abs.addView(images[j]); 
    } 

我該怎麼做這樣的事情呢?

如何動態創建多個Runnables?

此代碼不能正常工作

for(j=0;j<c;j++)  
    { 
     run[j]=new Runnable() 
     { 
      public void run() { 
       if(t[j]) 

       { 

        params[j]=(LayoutParams) images[j].getLayoutParams(); 
        params[j].x=x1[j]; 
        params[j].y=y1[j]; 
        images[j].setLayoutParams(params[j]); 

        x2[j]=r.nextInt(720-80)+80; 
        y2[j]=r.nextInt(400-80)+80; 

        ta[j] = new TranslateAnimation(0, x2[j]-x1[j], 0, y2[j]-y1[j]); 
        ta[j].setDuration(200); 
        ta[j].setFillAfter(true); 
        images[j].startAnimation(ta[j]); 
        x1[j]=x2[j]; 
        y1[j]=y2[j]; 

        handler.postDelayed(run[j], 200); 
       } 
      } 

     }; 
    for(j=0;j<c;j++)  
    { 
     this.runOnUiThread(run[j]); 
    } 

回答

2

創建單獨的類。這個類應該實現Runnable。

public class Single implements Runnable{ 
    public ImageView img=new ImageView(getBaseContext()); 
    public boolean t=true; 
    public int x2=0; 
    public int y2=0; 

    public void run() { 
     if(t) 

     { 
      LayoutParams params=(LayoutParams) img.getLayoutParams(); 
      params.x=x2; 
      params.y=y2; 
      img.setLayoutParams(params); 

      x2=r.nextInt(randX); 
      y2=r.nextInt(randY); 

      TranslateAnimation ta = new TranslateAnimation(0, x2-params.x, 0, y2-params.y); 
      ta.setDuration(1000); 
      ta.setFillAfter(true); 
      img.startAnimation(ta); 

      handler.postDelayed(this, 1000);  
     } 
    } 

} 

然後我可以動態地創建這個類的對象的數組,併爲每個對象運行動畫。

public Single[] images; 
images=new Single[c]; 

    for(j=0;j<c;j++)  
    { 
     images[j]=new Single(); 
     images[j].x2=r.nextInt(randX); 
     images[j].y2=r.nextInt(randY); 
     images[j].t=true; 
    } 
    for(int j1=0;j1<c;j1++) 
    { 

     this.runOnUiThread(images[j1]); 
    }