2011-07-19 61 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;等等......