我以编程方式将ImageView元素添加到水平线性布局中。然后我在其中一个ImageView资源上将scaleX和scaleY属性设置为“2”。图像可以正确缩放,但它不会移动其他ImageView元素,而不会重叠它们。我不喜欢图像与其他图像重叠。我该如何解决这个问题?这是我的代码:
int resources[] = {R.drawable.desert, R.drawable.koala, R.drawable.jellyfish,
R.drawable.lighthouse, R.drawable.desert};
for(int i=0; i<5; i++) {
ImageView logo = new ImageView(this);
logo.setLayoutParams(new LinearLayout.LayoutParams(100, 75));
logo.setImageResource(resources[i]);
logosContainer.addView(logo);
}
ImageView middleImage = (ImageView) logosContainer.getChildAt(2);
middleImage.setScaleX(middleImage.getScaleX() * 2);
middleImage.setScaleY(middleImage.getScaleY() * 2);
代码的结果如下所示: http://imageshack.us/a/img15/2811/scaleal.jpg
您可以清楚地看到缩放后的图像与其他图像重叠。
答案 0 :(得分:0)
当您离开循环时,您的ImageView已经被测量并放置在容器中。您必须刷新布局才能使其正常工作,tricky并且通常会导致“删除所有视图并再次添加它们”。那你为什么不在循环中进行“缩放”呢?
for(int i=0; i<5; i++) {
ImageView logo = new ImageView(this);
if(i==middleImageIndex){
logo.setLayoutParams(new LinearLayout.LayoutParams(100*2, 75*2,1));
} else {
logo.setLayoutParams(new LinearLayout.LayoutParams(100, 75,1));
}
logo.setImageResource(resources[i]);
logosContainer.addView(logo);
}
最后一个参数(100,75, 1 )是视图的weight,可确保每个ImageView同等重要且不会重叠。
另一个注意事项:setScale要求API等级11或更高,这可能会削减lot of users out there