【问题标题】:Image overlaps with other images when scaled缩放时图像与其他图像重叠
【发布时间】:2012-09-24 19:23:36
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    当您离开循环时,您的 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

    【讨论】:

    • 嗨 Chris,谢谢你的帮助,但我需要在图像放入容器后设置缩放。我将添加触摸事件,我将在这些事件上使用动画来为所选图像的缩放设置动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2013-03-10
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多