我试图想出一个办法来布局的一系列绕了一圈,意见,每个视图旋转而从圆朝外的方式。 下面的图片是什么,我正在寻找一个草图。 外部块是布局/ ViewGroup中,红色方块表示我想旋转的意见。
我熟悉的PivotX,PivotY和旋转视图属性,怀疑我会以某种方式利用这些,但我不知道如何在演唱会中使用这些用适当的布局,以获得预期的效果。
我试图想出一个办法来布局的一系列绕了一圈,意见,每个视图旋转而从圆朝外的方式。 下面的图片是什么,我正在寻找一个草图。 外部块是布局/ ViewGroup中,红色方块表示我想旋转的意见。
我熟悉的PivotX,PivotY和旋转视图属性,怀疑我会以某种方式利用这些,但我不知道如何在演唱会中使用这些用适当的布局,以获得预期的效果。
下面是做到这一点的例子。 我创建了一个新的Android项目,取而代之的RelativeLayout
是已经存在的,具有FrameLayout
。 这是> = 11 API,因为只有平移和旋转中调用View
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/hello_world" />
</FrameLayout>
我会在代码中创建一些快速的意见,只是你有什么看法替换它们。 我把他们都在布局的中心,通过设置他们的严重性LayoutParams
到Gravity.CENTER
。 然后,我在翻译和他们旋转到正确的位置:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FrameLayout main = (FrameLayout)findViewById(R.id.main);
int numViews = 8;
for(int i = 0; i < numViews; i++)
{
// Create some quick TextViews that can be placed.
TextView v = new TextView(this);
// Set a text and center it in each view.
v.setText("View " + i);
v.setGravity(Gravity.CENTER);
v.setBackgroundColor(0xffff0000);
// Force the views to a nice size (150x100 px) that fits my display.
// This should of course be done in a display size independent way.
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(150, 100);
// Place all views in the center of the layout. We'll transform them
// away from there in the code below.
lp.gravity = Gravity.CENTER;
// Set layout params on view.
v.setLayoutParams(lp);
// Calculate the angle of the current view. Adjust by 90 degrees to
// get View 0 at the top. We need the angle in degrees and radians.
float angleDeg = i * 360.0f / numViews - 90.0f;
float angleRad = (float)(angleDeg * Math.PI / 180.0f);
// Calculate the position of the view, offset from center (300 px from
// center). Again, this should be done in a display size independent way.
v.setTranslationX(300 * (float)Math.cos(angleRad));
v.setTranslationY(300 * (float)Math.sin(angleRad));
// Set the rotation of the view.
v.setRotation(angleDeg + 90.0f);
main.addView(v);
}
}
这是结果:
通过@Daniel答案是伟大的。
如果你需要更多的功能,你可以使用GitHub上这个漂亮的图书馆叫做Android的CircleMenu