2012-03-06 45 views
15

tôi sẽ cố gắng phát triển một ứng dụng mà tôi có thể vẽ một bản vẽ. Vì vậy, mỗi phòng đều có ID riêng của mình hoặc tên và nếu tôi chạm vào một phòng, tôi muốn hiển thị Thông báo bánh mì nướng có ID hoặc tên đó. Vấn đề là làm thế nào kiểm tra nếu và đường dẫn nào được chạm vào !!Android: Cách kiểm tra xem đường dẫn có chứa điểm chạm không?

Tôi đã thấy nhiều cuộc thảo luận chủ đề đã nói về vấn đề này. Có người nói sử dụng phương thức get2ounds getBounds và, sau đó, chứa phương pháp để kiểm tra xem điểm chạm có nằm trong Rect hay không. Nhưng, tôi đoán phương thức getBounds trả về Rect nhỏ nhất có chứa đường dẫn, phải không?

Vì vậy, các phòng có các dạng hình học tùy chỉnh khác nhau và vì lý do này, nếu tôi bị giới hạn về 2 phòng gần, phương pháp có thể trả về một nhóm điểm chung. Xấu! Mỗi phòng chỉ có điểm khu vực của mình. Làm thế nào tôi có thể giải quyết vấn đề này ?

Trong iOS, tôi có thể sử dụng phương pháp PathContainsPoint, nhưng, không may, Đường dẫn Android không có thứ gì đó tương tự.

Tôi hy vọng ai đó có thể giúp tôi Thx trước

Trả lời

39

Ok tôi giải quyết vấn đề của tôi. Tôi gửi mã ví dụ:

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

Việc này xác định sự kiện chạm trong một đa giác giới hạn nhất định quanh đường dẫn thay vì trên polyline. –

+0

Chính xác những gì tôi đang tìm kiếm – kinghomer

+0

đối tượng điểm trong points.add (điểm) là gì? –

1

Dưới đây là một ý nghĩ: tạo ra một con đường mới mà là một hình vuông nhỏ xung quanh thời điểm đó rất cảm động, và sau đó giao nhau rằng con đường với con đường của bạn để được kiểm tra sử dụng path.op() và xem nếu kết quả trống.

+0

Có, nhưng bạn bị giới hạn ở API 19 trở lên. Còn có những giải pháp nào nữa ko ? – Bartando

+0

Nếu đường dẫn của bạn là hình chữ nhật, hãy sử dụng câu trả lời của kinghomer ở ​​trên. Nếu đường dẫn của bạn là đa giác, hãy xem câu trả lời của sromku tại đây: http://stackoverflow.com/a/15817043/338479. Tôi có một giải pháp tổng quát hơn xử lý một đường dẫn bao gồm vòng cung, vòng tròn và đoạn đường, nhưng nó có một chút lông. Tôi có thể đăng nó vào tuần tới nếu có đủ sự quan tâm. –

+1

Cảm ơn, tôi đã giải quyết nó bằng cách phân lớp con đường và theo dõi tất cả các điểm, sau đó tôi đã sử dụng công thức http://stackoverflow.com/a/16391873/3284364 này và viết lại nó vào Java. – Bartando

Các vấn đề liên quan