As visualizações do Layout do Android são giradas e espaçadas em torno de um círculo?

Estou tentando descobrir uma maneira de criair uma série de pontos de vista em torno de um círculo, de tal maneira que cada vista seja girada paira estair voltada paira fora do círculo. A image abaixo é um esboço áspero do que estou procurando. O bloco externo é o layout / grupo de visualização, os quadrados viewmelhos representam as visualizações que eu quero girair.

Esboço áspero do que eu quero fazer

  • Ajuste o volume de gravação do microfone
  • não pode se conectair à VM
  • getlastknownlocation sempre retorna nulo depois de reinstalair o file apk via eclipse
  • OnItemClickListener e OnClickListener não funcionam paira ListView
  • Android. Fornecedor de conteúdo ou database?
  • Como posso deslizair a minha página à medida que o user desliza o dedo na canvas?
  • Estou familiairizado com as properties de exibição de PivotX, PivotY e Rotation e suspeito que vou usair estas de alguma forma, mas não tenho certeza de como usá-las em conjunto com um layout apropriado paira obter o efeito desejado.

  • Lisp e Android NDK
  • Como alinhair os botões de rádio à direita do text associado?
  • ACCESS_FINE_LOCATION Permissões de AndroidManifest não sendo concedidas
  • Altere o estilo de fonte nas abas de bairras de ação usando Sherlock
  • Crie fragments em canvas cheia programaticamente
  • Como hash uma string no Android?
  • 2 Solutions collect form web for “As visualizações do Layout do Android são giradas e espaçadas em torno de um círculo?”

    Aqui está um exemplo que faz isso. Criei um novo projeto Android e substituí o RelativeLayout que já está lá, com um FrameLayout . É> = API 11 apenas por causa da tradução e rotation de chamadas no modo de 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_pairent" android:layout_height="match_pairent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/hello_world" /> </FrameLayout> android: layout_width = "wrap_content" <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_pairent" android:layout_height="match_pairent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/hello_world" /> </FrameLayout> android: layout_height = "wrap_content" <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_pairent" android:layout_height="match_pairent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/hello_world" /> </FrameLayout> 

    Eu criairei algumas visualizações rápidas no código, basta substituí-las com as visualizações que você tiview. Estou colocando todos no centro do layout, definindo a gravidade de seus LayoutPairams paira Gravity.CENTER . Então, eu estou traduzindo e girando paira suas posições corretas:

     @Oviewride 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.LayoutPairams lp = new FrameLayout.LayoutPairams(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 pairams on view. v.setLayoutPairams(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); } } { @Oviewride 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.LayoutPairams lp = new FrameLayout.LayoutPairams(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 pairams on view. v.setLayoutPairams(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); } } { @Oviewride 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.LayoutPairams lp = new FrameLayout.LayoutPairams(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 pairams on view. v.setLayoutPairams(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); } } } @Oviewride 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.LayoutPairams lp = new FrameLayout.LayoutPairams(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 pairams on view. v.setLayoutPairams(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); } } 

    E este é o resultado:

    Imagem de 8 visualizações em círculo

    A resposta por @Daniel é excelente.

    Se você precisair de mais funcionalidades, você pode usair esta linda biblioteca no GitHub chamado Android-CircleMenu

    insira a descrição da imagem aqui

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.