2010-06-24 32 views
5

Tôi chỉ đang cố gắng để hiển thị một biểu tượng của một người đàn ông với một vòng tròn dưới chân của mình ở trung tâm của MapView. Đây là mã Lớp phủ của tôi:Tại sao bóng của Lớp phủ MapView của tôi ở sai địa điểm?

public class CenterOverlay extends Overlay 
{ 
    private Drawable d; 

    public CenterOverlay(Drawable drawable) 
    { 
     final int w = drawable.getIntrinsicWidth(); 
     final int h = drawable.getIntrinsicHeight(); 
     drawable.setBounds(0, 0, w, h); 
     this.d = drawable; 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     final int mapCenterX = mapView.getWidth()/2; 
     final int mapCenterY = mapView.getHeight()/2; 
     final int x = mapCenterX - d.getIntrinsicWidth()/2; 
     final int y = mapCenterY - d.getIntrinsicHeight(); 
     drawAt(canvas, d, x, y, shadow); 
    } 
} 

Mã để thêm Lớp phủ vào MapView đang hoạt động tốt (tôi có thể nhìn thấy biểu tượng ở đúng vị trí hiện tại). Vấn đề là bóng được tạo tự động nằm ở vị trí sai (về chiều rộng của biểu tượng ở bên trái và khoảng nửa chừng biểu tượng).

Cảm ơn trước sự giúp đỡ của bạn!

Trả lời

7

Với giới hạn bạn đang đặt - 0, 0, w, h - nguồn gốc ở trên cùng bên trái của biểu tượng, rất có thể điều gì gây ra việc tính toán bóng không chính xác. Tôi không biết chi tiết của hình ảnh này, nhưng nếu đó là biểu tượng của một người đàn ông, bạn có thể muốn xuất xứ gần trung tâm dưới cùng. ItemizedOverlay.boundCenterBottom() có thể làm điều này cho bạn, hoặc nếu bạn muốn biết thêm kiểm soát hạt mịn, bạn có thể thử chơi với mã như thế này:

drawable.setBounds(-width/2, -height, width - (width/2), 0) 
+0

Xin lỗi tôi đã quá lâu để trả lời, đi nghỉ. Dù sao, điều này làm việc - mặc dù tôi đã tự giải quyết nó bằng cách chuyển đổi thành ItemizedOverlay.boundCenterBottom(), ghi lại các giá trị được thiết lập, quay lại Lớp phủ của tôi và nhập các giá trị đó. : P Tôi đã có một sự hiểu biết xấu về cách hộp giới hạn hoạt động. –

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