3

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

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

4

1 回答 1

0

当您离开循环时,您的 ImageViews 已经被测量并放置在容器中。您必须刷新布局才能完成这项工作,这很棘手,并且通常会导致“删除所有视图并再次添加它们”。那么为什么不在循环中进行“缩放”呢?

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 ) 是视图的权重,它确保每个 ImageView 同等重要且不会重叠。

另一个注意事项:setScale 需要 API 级别 11 或更高,这可能会减少很多用户

于 2012-10-03T20:58:48.313 回答