Android: Wie kann man überprüfen, ob ein Pfad berührten Punkt enthält?

Ich würde versuchen, eine Anwendung zu entwickeln, in der ich eine Planimetrie zeichnen kann. Also, jedes Zimmer hat seine eigene ID oder Name und wenn ich ein Zimmer berühre, möchte ich eine Toast-Nachricht mit dieser ID oder Name zeigen. Das Problem ist, wie zu überprüfen, ob und welcher Weg berührt wird!

Ich habe eine Menge Themengespräche geführt, die über dieses Problem gesprochen haben. Jemand sagt, die getBounds- Methode zu verwenden, und nachher enthält Methode für die Überprüfung, ob berührte Punkt in Rect ist. Aber, ich denke, getBounds-Methode gibt die kleinste Rect, die Pfad enthält, richtig?

Also, Räume haben unterschiedliche kundenspezifische geometrische Formen und aus diesem Grund, wenn ich Beschränkungen über 2 enge Räume bekomme, könnte die Methode einen gemeinsamen Satz von Punkten zurückgeben. Schlecht! Jedes Zimmer hat nur ihre Fläche Punkte. Wie kann ich dieses Problem lösen?

In iOS könnte ich PathContainsPoint- Methode verwenden, aber leider hat Android Path nichts Ähnliches.

Ich hoffe jemand kann mir Thx im Voraus helfen

  • Dynamisch laden Sie eine AnimationDrawable in einem TextView
  • Wie man die Größe der Bitmap in ziehbare Ressource festlegt?
  • Bitmap-Informationen aus Bitmap erhalten, die im Zeichnungsordner gespeichert sind
  • So fügen Sie Animation zu textView hinzu
  • Wie stelle ich ImageViews-Quelle dynamisch aus ArrayList <String> mit beziehbarem Bildnamen ein?
  • Glänzender Farbverlauf mit androider Zieh-Xml
  • Android: Einfachste Möglichkeit, die Farbe einer png-Datei zu ändern
  • Ändern Sie die Tönung von Ziehbar in XML-Selektor
  • 2 Solutions collect form web for “Android: Wie kann man überprüfen, ob ein Pfad berührten Punkt enthält?”

    Ok, ich habe mein Problem gelöst. Ich posten den Beispielcode:

    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; } 

    Hier ist ein Gedanke: Erstellen Sie einen neuen Weg, der ein winziges Quadrat um den Punkt ist, der berührt wurde, und schneiden Sie dann diesen Pfad mit Ihrem Weg, um mit path.op () getestet zu werden und sehen Sie, ob das Ergebnis leer ist.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.