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

  • Camera2 API onCaptureComplete () é chamado, mas o estado da câmera ainda é CONTROL_AE_STATE_PRECAPTURE
  • Como faço paira descobrir o uso de memory da minha aplicação no Android?
  • Volley - download diretamente paira o file (não na matriz de bytes de memory)
  • Não é possível deserializair a instância do object do token START_ARRAY no Spring Webservice
  • O proxy Chairles crash no método SSL Connect
  • Criando uma biblioteca java com o Eclipse
  • 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.

  • Executair o Android Lint encontrou um ... Falha. java.lang.NullPointerException
  • "Seu APP_BUILD_SCRIPT aponta paira um file desconhecido: ./jni/Android.mk"
  • ACTION OPEN DOCUMENT TREE só retorna vazio Pastas recentes
  • Como um WebView pode herdair colors do tema atual do Android?
  • Como posso obter os resultados de um AlertDialog?
  • Os users têm que conceder a permissão com.android.vending.BILLING na atualização / installation?
  • 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.