【问题标题】:Avoid dynamic views from overlapping避免动态视图重叠
【发布时间】:2015-10-29 07:04:39
【问题描述】:

我正在开发一个需要动态创建多个按钮的应用程序(MainActivity 类的 onCreate)。每个按钮的尺寸为 100x100dp。

代码如下:

    for (int i = 0; i < count; i++) {
        buttons[i] = new Button(this);
        RelativeLayout ll = (RelativeLayout)findViewById(R.id.maincontainer);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        buttons[i].setY(i * 150); // should be random
        buttons[i].setX(i * 120); // should be random
        String temp = Character.toString(input.charAt(i));
        buttons[i].setText(temp);
        buttons[i].setOnClickListener(this);
        buttons[i].setId(i);
        test1.setText(Integer.toString(buttons[i].getId()));

        ll.addView(buttons[i],lp);
    }

这些按钮的位置在布局中应该是完全随机的,这可以通过为 x 和 y 坐标生成随机值来轻松实现。但我需要按钮不要与其他按钮重叠。此外,由于 100x100dp 尺寸,有时以前生成的按钮会被新按钮部分重叠。

【问题讨论】:

    标签: java android button view


    【解决方案1】:

    您实际上可以通过编程来解决这个问题。将您生成的视图的坐标保存在列表中。然后简单地比较坐标以查看新视图是否相交。您可以使用以下内容进行可视化:

    http://silentmatt.com/rectangle-intersection/

    我希望您尝试编写代码而不是从某个地方复制代码。 :)

    帮助您的 SO 链接:Determine if two rectangles overlap each other?

    【讨论】:

    • 谢谢@codester。这正是我认为的最后手段。流布局看起来很有趣,但现在将与您的方法一起使用。干杯!
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2018-02-12
    • 2023-01-19
    • 2023-03-21
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多