【问题标题】:Android Create multiple ImageViews in a loop ... strange behaviorAndroid循环创建多个ImageViews ...奇怪的行为
【发布时间】:2017-09-08 08:12:39
【问题描述】:

我正在循环中动态创建多个 ImageView。 每个 ImageView 都有不同的位置和不同的图像。

最后我将它们添加到 FrameLayout。

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(container.getWidth() / 3, container.getHeight() / 3);
    ImageView imageView;
    for(int i=0; i<cloths.size(); i++) {
        imageView = new ImageView(getActivity(), null);
        imageView.setAdjustViewBounds(true);
        Glide.with(getActivity()).load(cloths.get(i).getImage()).into(imageView);

        imageView.setOnTouchListener(touchListener);

        params.leftMargin = (int) cloths.get(i).getxPos(container.getWidth());
        params.topMargin = (int) cloths.get(i).getyPos(container.getHeight());
        params.rightMargin = 0;
        params.bottomMargin = 0;

        imageView.setScaleY(cloths.get(i).getScale());
        imageView.setScaleX(cloths.get(i).getScale());

        container.addView(imageView, params);

    }

不是正确定位所有图像视图,而是它们都在最后一个图像视图的位置上相互重叠。

任何想法如何解决它? 我做错了什么?

【问题讨论】:

  • 您对每个具有不同边距的 ImageView 使用相同的 params。为什么要使用 FrameLayout? FrameLayout 可以在 9 个位置存储视图。更改边距不是更改视图位置的正确方法。
  • 我使用 FrameLayout 是因为 ImageView 可以拖放!将图像视图添加到容器时,边距只是开始边距!
  • 但是你给了我解决方案...在每次循环运行时创建新参数是解决方案!

标签: android loops dynamic imageview add


【解决方案1】:

假设您知道所需的位置和大小(getyPos() 建议您这样做),您可以尝试聚合所有大小,以便图像一个接一个。如果您不知道尺寸,可以使用 Glide 帮助您找到它们(或者只是在图像到达后测量视图)。

public void putImages(FrameLayout container){
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(container.getWidth() / 3, container.getHeight() / 3);

    int topMargin = 0;
    for(int i=0; i<cloths.size(); i++) {
        ImageView imageView = new ImageView(getActivity(), null);
        imageView.setAdjustViewBounds(true);
        Glide.with(getActivity()).load(cloths.get(i).getImage()).into(imageView);

        imageView.setOnTouchListener(touchListener);

        params.leftMargin = (int) cloths.get(i).getxPos(container.getWidth());
        params.topMargin = topMargin;
        params.rightMargin = 0;
        params.bottomMargin = 0;

        topMargin += (int) cloths.get(i).getyPos(container.getHeight());

        imageView.setScaleY(cloths.get(i).getScale());
        imageView.setScaleX(cloths.get(i).getScale());

        container.addView(imageView, params);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多