2011-12-08 24 views
5

Tôi đã làm việc trên một ứng dụng nhỏ rất đơn giản bằng cách sử dụng chế độ xem mở rộng. Vấn đề là tôi không thể tìm thấy những gì được nhấn trong onTouchEvent của tôi. Tôi đã hiểu rằng tôi đã so sánh các điểm áp lực (x và y) với các phần tử và xem nó có thể là gì.Đăng ký nếu được nhấn bên trong rectF trong onTouchEvent

Nhưng ... Tôi đã tuyên bố một hình chữ nhật sử dụng:

Paint color= new Paint(); 
color.setColor(Color.BLACK); 
rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ; 
canvas.drawRect(rectF, color); 

Cho đến nay rất tốt, nhưng trong onTouchEvent chức năng

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    float x = event.getX() ; 
    float y = event.getY() ; 

    switch(action) { 
    case MotionEvent.ACTION_DOWN: 

     if(rectF().contains(x, y)) { 
      // Something should happen 
     } 

    } 

    invalidate(); 
    return true ; 
} 

tôi đặt rectF với một số loại tương đối điểm khác nhau, từ 0-1, nhưng X và Y tôi nhận được từ các sự kiện từ 0 trở lên tùy thuộc vào kích thước màn hình.

Tôi có thể dễ dàng chuyển đổi một trong hai giá trị không?

Sửa

tưởng ai đó quan tâm đến giải pháp cuối cùng ...

public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() ; 
    float x = event.getX() ; 
    float y = event.getY() ; 

    int width = this.getWidth() ; 
    int height = this.getHeight() ; 

    switch(action) { 
    case MotionEvent.ACTION_DOWN: 

     if(rectF().contains(x/width, y/height)) { 
      // Something should happen 
     } 

    } 

    return true ; 

} 

Trả lời

2

Các giá trị của các điểm tiếp xúc và RectF phải trên phạm vi tham khảo cùng trong oreder được so sánh đúng cách. Nghĩa là nếu bạn khai báo RectF bạn để sử dụng kích thước tương đối (0-1), bạn hoặc là sẽ cần phải:

1: bình thường vị trí MotionEvent bởi kích thước màn hình của bạn

HOẶC 2: "denormalize" các RectF kích thước bằng kích thước màn hình thực tế của bạn.

Tôi nghĩ 1 thường thích hợp hơn vì nó cho phép bạn xác định các thước đo của bạn về bố cục tương đối, độc lập với kích thước màn hình thực và chuyển đổi vị trí sự kiện khi đang di chuyển.

như thế này: rectF.contains(x/screenWidth, y/screenHeight);

Bạn có thể lấy các kích thước màn hình bằng cách gọi
Display display = getWindowManager().getDefaultDisplay() trong hoạt động của bạn và sau đó gọi display.getWidth() hoặc display.getHeight()

+0

tôi thấy rằng tôi chứ không phải muốn chiều rộng và chiều cao của tầm nhìn, vì vậy tôi đã sử dụng 'this.getHeight()' và 'this.getWidth()' này. – dubbe

+0

@ dubbe chắc chắn, tôi đã không nhận thức được bối cảnh của bạn, vì vậy tôi đã đưa ra lời khuyên về trường hợp đơn giản nhất – kostja

+0

Tôi biết, và đó là lời khuyên hoàn hảo, tôi chỉ làm rõ nó trong trường hợp ai đó đang tìm kiếm cùng một thứ! – dubbe

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