2013-10-16 60 views
1

以下是我寫出的代碼片段。我在背景中有一個大的可滾動圖像,前景中有一個較小的圖像。靜態的佈局對我來說工作得很好。我想要做的是,在5秒的時間間隔後,通過更改topMargin和leftMargin隨機化前景圖像的新位置。我知道一個僞隨機數發生器可以用來改變這個值。但是,我不確定如何聲明我希望「params.topMargin」和「params.leftMargin」值發生變化,或者如何使這些發生在計時器上。更改時間間隔的保證金值

  mImage = (ImageView)findViewById(R.id.Image1); 

    RelativeLayout.LayoutParams params = new 
      LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.topMargin = 1200; 
    params.leftMargin = 45; 

    mImage.setLayoutParams(params); 

由於限制的原因,我知道隨機數發生器的值範圍可以預先定義,我也需要這樣做。

如果有人可以幫助我指出正確的方向,這將是美妙的:d

編輯:我相當肯定我需要使用結合計時器,意圖,getRandom()與另一個。我只是不確定如何正確地把它們放在一起。

+0

這給了你1和N之間的整數(INT)'(的Math.random()* N + 1);' – Diego

+0

但如何告訴你隨機函數分別改變params.topMargin和.leftMargin的值? –

回答

1

試試這個在您的onCreate方法:

final Handler handler = new Handler(); 
final Runnable r = new Runnable() { 
    public void run() { 

     mImage = (ImageView)YourActivity.this.findViewById(R.id.Image1); 

     RelativeLayout.LayoutParams params = new 
      LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params.topMargin = (int)(Math.random()*500 + 1); //500 is the max margin, you can change it 
     params.leftMargin = (int)(Math.random()*500 + 1); //500 is the max margin, you can change it 

     mImage.setLayoutParams(params); 

     handler.postDelayed(this, 1000); //1000 is the interval in milliseconds 
    } 
}; 
r.run(); 
+0

這工作...有點。在使用上述代碼之前,前景圖像是正在移動的圖像。現在,隨着您的改正,背景圖像正在移動。我不知道爲了修復它而發生了什麼變化... –

+1

沒關係,當我粘貼代碼時,我混淆了背景和前景圖像的ID。完美的答案!十分感謝你的幫助! –