gpt4 book ai didi

android - 围绕一个圆圈动态排列按钮

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:51 27 4
gpt4 key购买 nike

我对 android 还是个新手,所以我对所有的 View 组件都不完全熟悉。我正在努力围绕一个圆圈动态对齐按钮。

我想要实现的是将 n 个按钮(n 可以在创建时更改)添加到看起来像附加图像的 View :

我想避免使用 absoluteLayout(但如果这是解决问题的唯一方法,我愿意接受建议)。我已经计算出按钮的 x/y 位置(暂时忽略按钮大小):

int iNumberOfButtons = 10;
double dIncrease = Math.PI * 2 / iNumberOfButtons,
dAngle = 0,
x = 0,
y = 0;

for( int i = 0; i < iNumberOfButtons; i++ )
{
x = 100 * Math.cos( dAngle ) + 200;
y = 100 * Math.sin( dAngle ) + 200;
dAngle += dIncrease;
// get button and set position?
}

我考虑过在自定义 View 中使用此代码,但据我所知,该 View 需要从 ViewGroup 继承以具有 addView 方法,然后只有 absoluteLayout 似乎允许设置 x、y 位置...我不知道如何实现此功能。

稍后我可能会向该 View 添加一些动画,因此如果可能,使用 SurfaceView 可能会很好,但这不是必需的。

最佳答案

我想我找到了我试图实现的解决方案。

我创建自己的 View 子类化 RelativeLayout。在 onCreate() 我设置

setWillNotDraw(false);

以便调用 onDraw()。然后我在 onDraw() 中继续:

int iHeight = getHeight();
int iWidth = getWidth();
int iNumberOfButtons = 10;
double dIncrease = Math.PI * 2 / iNumberOfButtons,
dAngle = 0,
x = 0,
y = 0;

for( int i = 0; i < iNumberOfButtons; i++ )
{
x = 200 * Math.cos( dAngle ) + iWidth/2;
y = 200 * Math.sin( dAngle ) + iHeight/2;
dAngle += dIncrease;
Button xButton = new Button(m_xContext);
xButton.setAdjustViewBounds(true);
xButton.setBackgroundResource(R.drawable.some_image);
LayoutParams xParams = (RelativeLayout.LayoutParams)xButton.getLayoutParams();
if( xParams == null )
{
xParams = new RelativeLayout.LayoutParams( xButton.getBackground().getIntrinsicWidth(), xButton.getBackground().getIntrinsicHeight() );
}
xParams.leftMargin = (int)x - ( xButton.getBackground().getIntrinsicWidth() / 2 ) ;
xParams.topMargin = (int)y - ( xButton.getBackground().getIntrinsicHeight() / 2 );
addView( xButton, xParams );
}

这给了我想要的结果,但是 LayoutParams 的初始化感觉(很可能是)错误。有更好的方法吗?

关于android - 围绕一个圆圈动态排列按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com