2011-07-19 64 views
1

我正在做一個pageindex,並且當前頁面應該用箭頭圖像(imageview)突出顯示。在relativelayout中動態地移動視圖

該指數是25個textviews加入到它的RelativeLayout:

for (int i = 0; i < 25; i++) { 
     TextView tv = new TextView(this); 
     tv.setText(Integer.toString(i+1)); 
     tv.setGravity(Gravity.CENTER); 
     int id = 2000+i; 
     tv.setId(id); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT); 
     if(i==0) 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
     else 
      params.addRule(RelativeLayout.RIGHT_OF, prevViewId); 
     prevViewId = id; 
     rl.addView(tv,params); 
    } 

而當頁面改變我做這樣的事情:

 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     params.addRule(RelativeLayout.ALIGN_BOTTOM, 2000+i); 
     params.addRule(RelativeLayout.ALIGN_RIGHT, 2000+i); 
     params.addRule(RelativeLayout.ALIGN_LEFT, 2000+i); 
     arrowImageView.setLayoutParams(params); 
     rl.requestLayout(); 
     rl.invalidate(); 

一切看起來是正確的,我可以把箭頭在「啓動」的任意頁面上,但是頁面改變時箭頭不會移動。我已經發現並驗證了代碼已經運行,並且所有內容都看起來正確,但仍然是箭頭停留在第一個位置。如果我強制刪除並添加新的imageview,而不是更新LayoutParams,則箭頭將完全消失。

回答

1

我有同樣的問題..我也想在運行時在參考佈局中移動我的視圖。所以,如果任何人都可以幫助,那將是非常棒的。

我相信上面發生的事情是,箭頭的位置發生變化,但它不會更新到屏幕。如果我錯了,請糾正我,這只是我的猜測,因爲我也有同樣的問題。

-edit- 經過一番周折之後,我發現我的作品是先刪除然後添加。 rl.removeView(tv); rl.addView(tv,params);

-edit- 另外,你可以將運動視圖的參數保存到一個唯一的變量中,這樣所有ude所要做的就是更改邊距...例如:而不是params,它是它的自己的名字「arrowParams」 然後移動它ude只需:arrowParams.leftMargin = 2000 + i;等等......