Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: ¿Cómo comprobar si una ruta de acceso contiene punto de contacto?

Intentaría desarrollar una aplicación en la que pueda dibujar una planimetría. Por lo tanto, cada habitación tiene su propia identificación o nombre y, si toco una habitación, quiero mostrar un mensaje de brindis con ese ID o nombre. ¡El problema es cómo comprobar si y qué trayectoria se toca !!

Vi un montón de discusiones de temas que hablaron sobre este problema. Alguien dice usar el método getBounds y, después, contiene el método para comprobar si el punto tocado está en Rect. Pero, supongo que el método getBounds devuelve el Rect más pequeño que contiene path, ¿verdad?

Por lo tanto, las habitaciones tienen diferentes formas geométricas personalizadas y, por esta razón, si obtienen límites de cerca de 2 salas cercanas, el método podría devolver un conjunto compartido de puntos. ¡Malo! Cada habitación tiene sólo sus puntos de la zona. Como puedó resolver esté problema ?

En iOS podría utilizar el método PathContainsPoint , pero, por desgracia, Android Path no tiene algo similar.

Espero que alguien pueda ayudarme Thx de antemano

  • Carga dibujable desde la tarjeta sd
  • Adb no se reconoce como comando interno o externo en Windows
  • Android Matrix, ¿qué devuelve getValues ​​()?
  • Captura de pantalla
  • IntelliJ IDEA 12 y Homebrew Android SDK
  • Cómo obtener la ruta completa del archivo desde URI
  • Camino de Android Studio a diferentes directorios
  • "Android: no puede encontrar sdkmanager.jar"
  • 2 Solutions collect form web for “Android: ¿Cómo comprobar si una ruta de acceso contiene punto de contacto?”

    Ok he resuelto mi problema. Publico el código de ejemplo:

    Path p; Region r; @Override public void onDraw(Canvas canvas) { p = new Path(); p.moveTo(50, 50); p.lineTo(100, 50); p.lineTo(100, 100); p.lineTo(80, 100); p.close(); canvas.drawPath(p, paint); RectF rectF = new RectF(); p.computeBounds(rectF, true); r = new Region(); r.setPath(p, new Region((int) rectF.left, (int) rectF.top, (int) rectF.right, (int) rectF.bottom)); } 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); if(r.contains((int)point.x,(int) point.y)) Log.d(TAG, "Touch IN"); else Log.d(TAG, "Touch OUT"); return true; } 

    Aquí hay un pensamiento: crear un nuevo camino que es un cuadrado diminuto alrededor del punto que fue tocado, y luego intersecar ese camino con su camino para ser probado usando path.op () y ver si el resultado está vacío.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.