2012-03-06 9 views
15

मैं एक ऐसा एप्लीकेशन विकसित करने की कोशिश करूंगा जिसमें मैं योजनाबद्धता तैयार कर सकूं। इसलिए, प्रत्येक कमरे में अपना आईडी या नाम और यदि मैं एक कमरे को छूता हूं, तो मैं उस आईडी या नाम के साथ टोस्ट संदेश दिखाना चाहता हूं। समस्या यह है कि कैसे जांचें और कौन सा पथ छुआ है !!एंड्रॉइड: कैसे जांचें कि पथ में स्पर्श बिंदु है या नहीं?

मैंने इस समस्या के बारे में बात करने वाली कई विषय चर्चाएं देखीं। कोई गेटबाउंड विधि का उपयोग करने के लिए कहता है और, इसके बाद, यह जांचने के लिए विधि है कि स्पर्श बिंदु बिंदु में है या नहीं। लेकिन, मुझे लगता है कि GetBounds विधि पथ में सबसे छोटा आयत देता है, है ना?

इसलिए, कमरों में अलग-अलग कस्टम ज्यामितीय रूप हैं और, इस कारण से, यदि मुझे लगभग 2 करीबी कमरे मिलते हैं, तो विधि बिंदुओं का साझा सेट वापस कर सकती है। खराब! प्रत्येक कमरे में केवल उनके क्षेत्र के अंक हैं। इस समस्या का समाधान किस प्रकार से किया जा सकता है ?

आईओएस में मैं PathContainsPoint विधि का उपयोग कर सकता था, लेकिन दुर्भाग्यवश, एंड्रॉइड पथ में कुछ समान नहीं है।

मुझे आशा है कि कोई मुझे अग्रिम

उत्तर

39

ठीक है मैं मेरी समस्या हल में Thx कर सकते हैं। मैं उदाहरण कोड पोस्ट:

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

यह पॉलीलाइन के बजाए पथ के चारों ओर दिए गए बाध्य बहुभुज में एक स्पर्श ईवेंट की पहचान करता है। –

+0

वास्तव में मैं क्या देख रहा था – kinghomer

+0

अंक.एड (बिंदु) में बिंदु वस्तु क्या है? –

1

यहाँ एक विचार है: एक नया पथ जो बिंदु के आसपास एक छोटे से वर्ग कि छुआ था है, और फिर अपने पथ के साथ उस पथ एक दूसरे को काटना path.op() का उपयोग करने और यह देखने के परीक्षण करने के लिए बनाने के परिणाम खाली है।

+0

हां, लेकिन आप एपीआई 1 9 और उससे ऊपर तक ही सीमित हैं। क्या कोई अन्य समाधान है? – Bartando

+0

यदि आपका पथ एक आयताकार है, तो ऊपर राजाहोमर के उत्तर का उपयोग करें। यदि आपका पथ बहुभुज है, तो सोमकु का जवाब यहां देखें: http://stackoverflow.com/a/15817043/338479। मेरे पास एक और सामान्य समाधान है जो आर्क, सर्किल और लाइन सेगमेंट वाले पथ को संभालता है, लेकिन यह थोड़ा बालों वाला है। यदि पर्याप्त रुचि है तो मैं इसे अगले सप्ताह पोस्ट कर सकता हूं। –

+1

धन्यवाद, मैंने पथ को सबक्लासिंग करके और सभी बिंदुओं का ट्रैक रखने के द्वारा हल किया है, फिर मैंने इस http://stackoverflow.com/a/16391873/3284364 सूत्र का उपयोग किया है और इसे जावा में फिर से लिखा है। – Bartando

संबंधित मुद्दे