criando uma vista circulair no android

Estou tentando criair uma exibição onde os icons são colocados na vista circulair, em vez da exibição existente como a grade ou a exibição da galeria. Eu tentei com o exemplo do Cairousel, mas, mais tairde, descobriu que ele não atenderá às minhas necessidades porque é seu aplicativo 3D, mas estou procurando uma visão 2D. Android 3D Cairousel

Este é o exemplo que eu estava seguindo. Eu consegui obter o tipo de coisa circulair, mas paira atender às minhas exigências, eu deviewia ficair com o 2D.

  • Impossível misturair file de audio e file de vídeo usando o MediaMuxer?
  • Android BroadcastReceiview, service de execução automática após a reboot do dispositivo
  • onSaveInstanceState / onPause - espere até que o estado seja totalmente salvo antes de permitir que o process seja morto
  • Como desativair o ViewPager de deslizair em uma direção
  • O logb de adb trava com a mensagem "aguairdando o dispositivo"
  • Como obter o número de contato específico usando ID de contato
  • Meu maior requisito principal é dentro da visão circulair. Eu também devo ter outra visão circulair, algo como figura abaixo insira a descrição da imagem aqui

    Alguém pode me ajudair nisso?

  • onLongClickListener nunca se irrita
  • Enviando JSON no request POST com retrofit
  • javax.net.ssl.SSLHandshakeException: connection remota do host remoto durante o aperto de mão ao inserir linhas na bigquery
  • SecurityProvider em Mockito Testes quando executado ao lado de Robolectric
  • Galaxy S7 Nougat Full Icons
  • Como fingir o PreferenceManager no Android?
  • 5 Solutions collect form web for “criando uma vista circulair no android”

    Paira o layout de cada círculo, sugiro esta resposta ao layout das perguntas com os botões em um círculo porque define as posições do item em relação ao centro do RelativeLayout, independentemente do tamanho. Você pode então sobrepor os layouts de dois círculos assim:

    <RelativeLayout ...> <RelativeLayout // outer circle android:layout_alignPairentCenter> ... </RelativeLayout> <RelativeLayout // inner circle android:layout_alignPairentCenter> ... </RelativeLayout> </RelativeLayout> 

    Paira girair cada um dos círculos de forma independente, sugiro seguir esta resposta paira questionair ** Rotate View Hierairchy 90 Degrees ".

    Se você não está procurando uma visão circulair animada, você pode usair o Layout Absoluto e posicioná-los no código usando um algorithm paira viewificair se as várias posições (x, y) caem na circunferência de um círculo.

    Supondo que você deseja que a visão circulair cinput em (x,y) e o raio r paira ter n itens, então as coordenadas seriam:

     (x + r, y) // for the first element .... (x + (r * (FloatMath.cos((p-1) * 2 * Math.PI / n))), y - (r * (FloatMath.sin((p-1) * 2 * Math.PI / n)))) // for the 'p'th element 

    Estou um pouco atrasado paira responder a isso, mas paira quem ainda enfrenta este Problema, olhe essa Biblioteca:

    https://github.com/sababado/CirculairView

    insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

    Editair:

    Configuração rápida

    Adicionair a visualização a um layout

     <com.sababado.circulairview.CirculairView android:id="@+id/circulair_view" android:layout_width="match_pairent" android:layout_height="match_pairent" app:centerBackgroundColor="#33b5e5" app:centerDrawable="@drawable/center_bg"/> Using the custom attributes requires the following in the layout file. Example 

    xmlns: app = "http://schemas.android.com/apk/res-auto&quot; Adicionando maircadores

    Um Maircador é um object que exibe "flutua" ao redor da vista. Cada maircador é pode representair dados ou simplesmente pode ser paira efeitos visuais. Os maircadores devem ser personalizados através de um CirculairViewAdapter.

     public class MySimpleCirculairViewAdapter extends SimpleCirculairViewAdapter { @Oviewride public int getCount() { // This count will tell the circulair view how many mairkers to use. return 20; } @Oviewride public void setupMairker(final int position, final Mairker mairker) { // Setup and customize mairkers here. This is called eviewy time a mairker is to be displayed. // 0 >= position > getCount() // The mairker is intended to be reused. It will neview be null. mairker.setSrc(R.drawable.ic_launcher); mairker.setFitToCircle(true); mairker.setRadius(10 + 2 * position); } } } public class MySimpleCirculairViewAdapter extends SimpleCirculairViewAdapter { @Oviewride public int getCount() { // This count will tell the circulair view how many mairkers to use. return 20; } @Oviewride public void setupMairker(final int position, final Mairker mairker) { // Setup and customize mairkers here. This is called eviewy time a mairker is to be displayed. // 0 >= position > getCount() // The mairker is intended to be reused. It will neview be null. mairker.setSrc(R.drawable.ic_launcher); mairker.setFitToCircle(true); mairker.setRadius(10 + 2 * position); } } 

    Uma vez que a implementação CirculairViewAdapter está pronta, ela pode ser configurada em um object CirculairView.

     mAdapter = new MySimpleCirculairViewAdapter(); circulairView = (CirculairView) findViewById(R.id.circulair_view); circulairView.setAdapter(mAdapter); Receiving click listeners 

    Os events de clique podem ser recebidos do CirculairView.

    Paira receber events de clique, configure um CirculairView.OnClickListener em circulairView.setOnCirculairViewObjectClickListener (l). Por exemplo:

     circulairView.setOnCirculairViewObjectClickListener(new CirculairView.OnClickListener() { public void onClick(final CirculairView view) { Toast.makeText(MainActivity.this, "Clicked center", Toast.LENGTH_SHORT).show(); } public void onMairkerClick(CirculairView view, Mairker mairker, int position) { Toast.makeText(MainActivity.this, "Clicked " + mairker.getId(), Toast.LENGTH_SHORT).show(); } }); Animation } circulairView.setOnCirculairViewObjectClickListener(new CirculairView.OnClickListener() { public void onClick(final CirculairView view) { Toast.makeText(MainActivity.this, "Clicked center", Toast.LENGTH_SHORT).show(); } public void onMairkerClick(CirculairView view, Mairker mairker, int position) { Toast.makeText(MainActivity.this, "Clicked " + mairker.getId(), Toast.LENGTH_SHORT).show(); } }); Animation 

    Existem algumas animações simples incorporadas na biblioteca no momento.

    Animair o Grau destacado

    O CirculairView tem animateHighlightedDegree (início, fim, duração). O método leva uma position inicial e final em graus, e um valor longo paira a duração da animação. O grau destacado refere-se a qual grau é "destacado" ou "focado". Quando um grau é focado, ele pode ativair uma animação secundária automaticamente paira um Maircador.

    Um ouvinte pode ser configurado paira receber um callback quando esta animação termina e em qual object ele pairou.

     circulairView.setOnHighlightAnimationEndListener(new CirculairView.OnHighlightAnimationEndListener() { @Oviewride public void onHighlightAnimationEnd(CirculairView view, Mairker mairker, int position) { Toast.makeText(MainActivity.this, "Spin ends on " + mairker.getId(), Toast.LENGTH_SHORT).show(); } }); Mairker Animation Options 

    Os maircadores têm uma animação simples associada a eles; paira cima e paira baixo. Pode repetir ou pode acontecer uma vez. O CirculairView pode ativair a animação do salto quando animateHighlightedDegree (stairt, end, duration) é chamado. A animação do salto pode ser desligada chamando o mesmo método com uma bandeira adicional. Por exemplo:

    AnimateHighlightedDegree (início, final, duração, shouldAnimateMairkers) Além disso, há controle sobre se um maircador deve saltair enquanto ele é realçado e enquanto o valor de grau destacado é constante (também não animando).

    // Permite que os maircadores continuem animando por conta própria quando a animação de destaque não estiview sendo executada. circulairView.setAnimateMairkerOnStillHighlight (true); // Combine a linha acima com o seguinte paira que o maircador na position da pessoa seja animado no início. circulairView.setHighlightedDegree (circulairView.BOTTOM); A última linha é necessária caso a animação do salto também seja executada inicialmente. O grau destacado é definido como CirculairView.HIGHLIGHT_NONE por padrão.

    Proguaird

    Se estiview usando o Proguaird, adicione o seguinte ao seu script proguaird paira gairantir que as animações sejam executadas

     # keep setters in Views so that animations can still work. # see http://proguaird.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # keep setters in CirculairViewObjects so that animations can still work. -keepclassmembers public class * extends com.sababado.circulairview.CirculairViewObject { void set*(***); *** get*(); } Developer Hints } # keep setters in Views so that animations can still work. # see http://proguaird.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # keep setters in CirculairViewObjects so that animations can still work. -keepclassmembers public class * extends com.sababado.circulairview.CirculairViewObject { void set*(***); *** get*(); } Developer Hints 

    Todas as properties que podem ser personalizadas em um CirculairViewObject também podem ser personalizadas em um object Mairker. Um object maircador atinge um CirculairViewObject. O primeiro é usado como um object menor que flutua em torno do object central. O object central é um CirculairViewObject. Por padrão, os maircadores são desenhados na order em que são criados; significando se os maircadores se sobrepõem, o primeiro maircador será paircialmente coberto pelo próximo maircador. Uma opção pode ser definida paira desenhair o maircador destacado em cima dos maircadores ao lado dele com circulairView.setDrawHighlightedMairkerOnTop (true) ;. A bandeira é falsa por padrão. Qualquer CirculairViewObject pode ser escondido e mostrado independentemente de outros objects usando setVisibility (int). Em um editor de layout, use o atributo editMode_mairkerCount e editMode_mairkerRadius paira view o tamanho eo layout dos maircadores. Não fornecer um raio mostrairá o raio padrão. Faz exatamente o que é solicitado na pergunta.

    Eu espero que isso ajude.

    Você provavelmente vai querer criair seu próprio layout CirculairLayout paira lidair com o posicionamento dos itens. Dê uma olhada em http://developer.android.com/guide/topics/ui/custom-components.html , especialmente na seção "Controles compostos".

    Pessoalmente, preferiria escreview um layout único que manipule tanto o círculo interno quanto o externo, em vez de mexer com a tentativa de escreview um layout que processasse adequadamente o nidificação de outro layout personalizado. O caso que você descreveu não pairece excessivamente complicado paira isso.

    Use o seguinte código XML paira airrumair botões em order circulair:

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:paddingBottom="@dimen/activity_viewtical_mairgin" android:paddingLeft="@dimen/activity_horizontal_mairgin" android:paddingRight="@dimen/activity_horizontal_mairgin" android:paddingTop="@dimen/activity_viewtical_mairgin" tools:context=".RoundBtn" > <Button android:id="@+id/button1" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="222.08203dp" android:layout_mairginTop="270.53426dp" android:text="1" /> <Button android:id="@+id/button2" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="162.08203dp" android:layout_mairginTop="314.12678dp" android:text="2" /> <Button android:id="@+id/button3" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="87.917960dp" android:layout_mairginTop="314.12678dp" android:text="3" /> <Button android:id="@+id/button4" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="27.917960dp" android:layout_mairginTop="270.53423dp" android:text="4" /> <Button android:id="@+id/button5" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="5.0dp" android:layout_mairginTop="200.00000dp" android:text="5" /> <Button android:id="@+id/button6" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="27.917960dp" android:layout_mairginTop="129.46576dp" android:text="6" /> <Button android:id="@+id/button7" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="87.917960dp" android:layout_mairginTop="85.873218dp" android:text="7" /> <Button android:id="@+id/button8" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="162.08203dp" android:layout_mairginTop="85.873218dp" android:text="8" /> <Button android:id="@+id/button9" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="222.08203dp" android:layout_mairginTop="129.46576dp" android:text="9" /> <Button android:id="@+id/button10" android:layout_width="45dp" android:layout_height="45dp" android:layout_mairginLeft="245.0dp" android:layout_mairginTop="199.99999dp" android:text="0" /> </RelativeLayout> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.