Dibujo con los dedos
Encontré este pequeño código de ejemplo, para dibujar con tu dedo:
Http://marakana.com/tutorials/android/2d-graphics-example.html
He aquí algunos de los códigos relevantes:
- Control de un motor con un dispositivo Android
- Uso de hormigas-fuente 7 o superior para permitir que el operador de diamante
- Jmdns registra en la interfaz IPv4, pero transmite IPv6
- ¿Pausar y reanudar AsyncTasks? (Androide)
- No se puede resolver el destino 'android-8' después de importar las bibliotecas
List<Point> points = new ArrayList<Point>(); @Override public void onDraw(Canvas canvas) { for (Point point : points) { canvas.drawCircle(point.x, point.y, 5, paint); } } public boolean onTouch(View view, MotionEvent event) { Point point = new Point(); point.x = event.getX(); point.y = event.getY(); points.add(point); invalidate(); Log.d(TAG, "point: " + point); return true; }
Yo estaba mirando a través de él, y vi que están agregando puntos a un ArrayList, a continuación, el bucle a través de la ArrayList, esto no parece que es un enfoque muy optimizado para esto. ¿Existe un enfoque mejor o es un buen enfoque?
Después de probar mi Samsung GS3, coloreé toda la pantalla con un tamaño de círculo de 20, y cuanto más cerca estaba de todo el color, más lento tardaba en dibujar, y luego los círculos se estaban espaciando.
- ¿Cómo puedo añadir dinámicamente imágenes a un GridView?
- Android: convierte textView en una salida de registro
- Seguimiento de FTP subir datos en android?
- Se ha producido un error en la conexión de GoogleApiClient
- Problema de zona horaria en Android
- Base de datos Sqlite que actualiza una fila Android
- Detectar si el usuario ha calificado la aplicación en Android
- Expectativa de puntero nulo al obtener valores de preferencia compartida
No, esto tiene sentido en este ejemplo.
Él recorre todos los puntos que quiere dibujar. Esto significa que añade cada punto a la matriz, por lo que puede recorrer todos los objetos a la vez.
Usted verá a menudo esto en programación del juego.
Esto también es muy ampliable.
- Puedes agregar tantos puntos como quieras
- Apoya el polimorfismo
- No es necesario realizar variables para varios puntos> Menos código
En primer lugar, utilice el trazo (no los círculos) para dibujar la línea. Segundo, aproximado. He aquí un resumen:
- Cambie la
Paint
para usar un trazo conwidth=5
. Eso reduce la necesidad de dibujar tantos círculos. -
Escoja un umbral, por ejemplo
3px
después de lo cual agregará un punto enonTouch()
.if (Math.abs(previousX - event.getX()) < THRESHOLD && Math.abs(previousY - event.getY()) < THRESHOLD) { return; } previousX = event.getX(); previousY = event.getY(); // drawing update goes here
Esto debería reducir el número de puntos (imperceptibles).
-
Utilice la clase
Picture
oPath
para dibujar la línea y usarCanvas.drawPath()
oCanvas.drawPicture()
. Esto, especialmente para un gran número de puntos, acelerará realmente el dibujo ya que todos los comandos de dibujo se pasarán a la función de dibujo interno en una llamada. -
Simplifique la forma cuando lo necesite. Por ejemplo, puede eliminar los puntos más antiguos (que sería un caso perfecto para utilizar un búfer circular ), utilizar el algoritmo Ramer-Douglas-Peucker que es bastante fácil de implementar, da buenos resultados y tiene complejidad de
O(nlogn)
.
- ¿Cómo crear un cajón deslizante en ambos lados opuestos el uno al otro?
- 2 preguntas sobre la programación de socket con Android