2010-11-10 37 views
9

Có cách nào tôi có thể đặt mức zoon tối thiểu cho MapView của mình không ?. Tôi không biết liệu bạn có nhận ra bản đồ trông thực sự xấu xí khi mức thu phóng là một. Bạn thấy toàn bộ bản đồ thế giới được nhân rộng. Tôi muốn tránh mức thu phóng đó bất kể người dùng đang phóng to qua cử chỉ hoặc điều khiển thu phóng. Tôi đã xem xét các lựa chọn thay thế khác nhau, nhưng không có cách nào có hiệu quả. Có ai đó có một ý tưởng tốt về điều này?Đặt mức thu phóng tối thiểu cho MapView

Ger

Trả lời

17

May mắn thay, tôi đã có một lớp phủ trong MapView tôi. Nếu không, tôi đoán bạn sẽ phải tạo ra một, chỉ cho tính năng nhỏ bé này: - /. Tôi tự hỏi tại sao không có cách nào khác để làm điều này dễ dàng hơn.

Anyways, bạn chỉ cần chép đè phương thức bốc thăm của bạn như thế này:

@Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
     super.draw(canvas, mapView, shadow); 
     if (mapView.getZoomLevel() < 2) 
      mapView.getController().setZoom(2); 
    } 

Ger

-4

chỉ cần viết onCreate mã sau:

MapController myMC myMapView.getController(); 
myMC.setZoom(int value); 
+1

Cảm ơn câu trả lời nhanh. Tuy nhiên, đây không phải là một giải pháp cho vấn đề của tôi. Với mã đó, bạn chỉ cần thiết lập mức thu phóng ban đầu. Nhưng điều đó không tránh người dùng có thể thu nhỏ và có chế độ xem bản đồ xấu xí với mức thu phóng bằng 1 (hai châu phi, hai châu Mỹ) – ggomeze

+0

nếu u không tìm tùy chọn standart, đặt giới hạn thủ công :) – polyakovsky

+0

Tại sao bạn có giới hạn những gì người dùng có thể làm không? Nếu họ muốn nhìn toàn thế giới thì sao? – Falmarri

3

Tương tự như câu trả lời ggomeze của bằng cách ghi đè một phương pháp *draw() nhưng nó có thể tốt hơn để ghi đè dispatchDraw() trong MapView . Bằng cách này, bạn có thể chặn bản vẽ cho mức thu phóng nơi các ô trống. Cũng xin lưu ý rằng tốt để căn giữa bản đồ vào thời điểm này như thể bạn đang phóng to bằng cử chỉ cảm ứng bằng cách đặt mức thu phóng theo cách thủ công có thể khiến bản đồ dịch chuyển ra khỏi tâm mỗi lần (làm cho giao diện MapView một chút tinh ranh hơn!).

@Override 
public void dispatchDraw(Canvas canvas) { 

    //limit zoom level 
    if(getZoomLevel() == 1){ 
     getController().setZoom(2); 
     getController().setCenter(new GeoPoint(0, 0)); 
     //dont draw as it will just be blank and then jump 
     return; 
    } 

    super.dispatchDraw(canvas); 
} 

Điều này có thể được cải thiện khi bằng cách theo dõi mức độ phóng trong khi cử chỉ đang diễn ra cũng vì vậy người dùng không thể nhìn thấy zoom một phần với mức zoom thấp nhất bị chặn (1) khi dùng cử chỉ, nhưng tôi tưởng tượng trường hợp trên sẽ phù hợp với hầu hết và dễ dàng hơn nhiều!

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