缩放时图像与其他图像重叠

时间:2012-10-03 19:46:15

标签: android imageview android-linearlayout image-scaling overlapping

我以编程方式将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

您可以清楚地看到缩放后的图像与其他图像重叠。

1 个答案:

答案 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