Menú círculo Android como notas de captura

Aplicación Catch Notes

Trato de hacer círculo de menú como en esta aplicación.

En el modo "expandido" dibujo este componente como sigue:

<RelativeLayout android:id="@+id/bigCircle"> <!--color full borders--> <my.custom.component android:id="@+id/middleCircle"> <!--circle for buttons--> <RelativeLayout android:id="@+id/smallCircle"> <!--minus button--> </RelativeLayout> </my.custom.component> </RelativeLayout> 

En el método onDraw de my.custom.component círculo en 8 partes usando android.graphics.Path con android.graphics.Paint y algunas matemáticas.
Visualmente tengo exactamente como se muestra en la captura de pantalla. Pero cuando presiono en parte del círculo, necesito redibujar esta parte en otro color para demostrar al usuario qué algo está pasando.

Cómo puedo volver a dibujar la parte de la tela del componente que corta fuera de otra parte del lienzo por android.graphics.Path por ejemplo.
En otra palabra sé qué redibujar lienzo debo hacer en el método onDraw, sé que puedo mostrar algunos bitmap de drawables pintado en photoshop y tener algunos "problemas de pantalla múltiple", sé cómo puedo determinar la parte que el usuario presionado. Pero no sé cómo puedo seleccionar parte del lienzo y volver a dibujarlo.

Desarrollador de Catch aquí. Si estoy entendiendo su problema, tiene problemas para entender cómo dibujar específicamente el indicador de selección / selección en una sección de su menú circular.

Si bien hay un montón de maneras diferentes se podría implementar, lo que se está inclinando hacia (utilizando android.graphics.Path ) es cómo lo hicimos. En la jerarquía de vista de nuestro botón de captura, hay un elemento que sirve como el lienzo en el que se dibuja el color de resaltado de la selección (si hay una selección activa).

Si tuviera una View personalizada similar en su diseño, podría duplicar este comportamiento de la misma forma. Primero, necesitará el Path que define la selección para un segmento de círculo particular. Usando Path.addArc(RectF, float, float) podemos obtener el camino en forma de rebanada de pizza que necesitamos:

 private Path getPathForSegment(float startAngle, float sweep) { Point center = new Point(getWidth() / 2, getHeight() / 2); RectF rect = new RectF(0f, 0f, getWidth(), getHeight()); Path selection = new Path(); selection.addArc(rect, startAngle, sweep); selection.lineTo(center.x, center.y); selection.close(); return selection; } 

Los getWidth() y getHeight() anteriores son para el objeto de visualización personalizado adjunto, por lo que definen el cuadro delimitador que contiene el círculo en el que se dibuja la selección.

Luego, en la vista personalizada onDraw(Canvas) , si su código ha determinado una selección debe dibujarse para un segmento:

 @Override protected void onDraw(Canvas canvas) { // Assume one has the rest of these simple helper functions defined if (shouldDrawSelection()) { float startAngle = getStartAngleOfSelectedSegment(); float sweep = getSweepAngle(); Paint paint = getPaintStyleForSelectedSegment(); Path path = getPathForSegment(startAngle, sweep); canvas.drawPath(path, paint); } // ... super.onDraw(canvas); } 

En las otras áreas de su código que son los toques de seguimiento, simplemente invoque invalidate() en la vista personalizada para que vuelva a dibujar (o no) la ruta de selección basada en cambios en la entrada o el estado.

Recuerde que es una buena práctica evitar new objetos en onDraw() , por lo que la mayoría de estos bloques de construcción ( Path s, Paint s, etc.) pueden ser construidos antes de tiempo (o una vez, en la primera aparición) y reutilizados.

Espero que esto está cerca de lo que estaban pidiendo!

  • Haga que una cierta parte de un android-textview se alinee a la derecha
  • Utilizar fuentes externas en android
  • App Widget no aparece en la lista de widgets en dispositivos Honeycomb hasta que se reinicie la aplicación
  • Establecer el fondo transparente de una vista de imagen en Android
  • Deshabilitar el botón al hacer clic
  • Spinner - enfoque al primer artículo
  • Mostrar datos en android utilizando gridview desde la base de datos
  • Cómo utilizar el widget de NumberPicker Android 4.0
  • ¿Cómo iniciar un PopupWindow o un diálogo de un servicio de método de entrada?
  • Cómo controlar la velocidad de deslizamiento de SlidingDrawer en Android
  • Cómo agregar múltiples TextView dynamicall a la definición LinearLayout en main.xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.