【发布时间】:2017-07-16 00:14:12
【问题描述】:
在将 ImageView 添加到相对布局后,我正在尝试获取其位置。
我通过单击按钮在相关布局中随机添加 ImageView。到目前为止,这非常有效。但为什么 getLeft、getRight、getTop、getBottom 返回 0?问题是,这些值在下一次单击按钮时都可用。因此,当 ImageView 1 在创建时所有内容都为 0 时,如果我再次单击该按钮,它就会显示信息。
所以说清楚:
Buttonclick-1 -> 添加了 ImageView-1(在 getLeft、Top、Right、Bottom 上输出 0)
Buttonclick-2 -> ImageView-2 添加(ImageView-1 输出坐标,但 ImageView-2 输出 0)
我确定这与 ImageView 的绘制有关。当我遍历孩子并询问实际位置时,它肯定还没有准备好绘制在视图上。
到目前为止,这是我的代码:
final ConstraintLayout cl = (ConstraintLayout) findViewById(R.id.constraintLayout);
final ScrollView sc=(ScrollView) findViewById(R.id.scrollView);
final Button btnButton = (Button) findViewById(R.id.buttontest);
final LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayout);
final RelativeLayout rl = (RelativeLayout) findViewById(R.id.rLayout);
btnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageView im= new ImageView(UserAreaActivity.this);
im.setImageResource(R.mipmap.ic_launcher);
im.setScaleType(ImageView.ScaleType.FIT_XY);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
Random r = new Random();
Random r2 = new Random();
int x = r.nextInt(rl.getWidth());
int y = r2.nextInt(rl.getHeight());
if(x+(layoutParams.width) >= rl.getWidth()){
x=x-layoutParams.width;
}
if(y+(layoutParams.height) >= rl.getHeight()){
y=y-layoutParams.height;
}
layoutParams.leftMargin=x;
layoutParams.topMargin=y;
im.setLayoutParams(layoutParams);
TextView tv = new TextView(UserAreaActivity.this);
tv.setText("my text");
rl.addView(im);
ll.addView(tv);
System.out.println("ID "+im.getId());
System.out.println("Left "+im.getLeft());
System.out.println("Right "+im.getRight());
System.out.println("Top "+im.getTop());
System.out.println("Bottom "+im.getBottom());
for (int i = 0; i < rl.getChildCount(); i++) {
View subView = rl.getChildAt(i);
if (subView instanceof ImageView) {
ImageView imageView = (ImageView) subView;
System.out.println("ID "+i);
System.out.println("Left "+imageView.getLeft());
System.out.println("Right "+imageView.getRight());
System.out.println("Top "+imageView.getTop());
System.out.println("Bottom "+imageView.getBottom());
}
}
}
});
【问题讨论】:
标签: android android-layout imageview position