2015-10-29 298 views
0

我正在开发一个需要动态创建多个按钮的应用程序(onCreate MainActivity类)。每个按钮的尺寸均为100x100dp。Android:避免重叠动态视图

下面的代码:

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,以前生成的按钮有时会与新的按钮部分重叠。

请帮我解决问题。谢谢!

回答

0

你可以把你的按钮流布局中,检查出的链接https://github.com/blazsolar/FlowLayout

+0

线性布局的层叠听起来很吸引人。刚刚检出链接[链接](http://stackoverflow.com/questions/6996837/android-multi-line-linear-layout/13505029#13505029)。如果编码器的方法不能解决问题,请尝试一下。谢谢! – Saurav

0

实际上,你可以算出这个编程。保持您生成的视图的坐标存储在列表中。然后简单地比较坐标以查看新视图是否相交。您可以使用下面的可视化:

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

我希望你尝试写代码比从某处复制它。 :)

一个SO链接来帮助你:Determine if two rectangles overlap each other?

+0

谢谢@codester。这正是我认为的最后一招。流动布局看起来很有趣,但现在随着你的接近而去。干杯! – Saurav