2011-08-03 39 views
19

Tôi có hai nút ở mỗi góc dưới cùng của MapView, phần nào che khuất biểu trưng của google ở ​​góc dưới cùng bên trái.Di chuyển logo của Google trong MapView

Để tuân thủ các điều khoản và điều kiện của API, tôi cần phải di chuyển biểu trưng của google đến một nơi nào đó dễ thấy hơn. tức là trên nút.

Tài liệu Google API tuyên bố rằng biểu tượng google được vẽ theo phương pháp onDraw() của MapView nhưng tôi không biết cách ghi đè nó đúng cách vì bản đồ google là nguồn đóng.

Tôi có thể thực hiện việc này trong iPhone bằng cách tìm đúng UIView trong số trẻ em MKMapView's nhưng tôi không thể tìm ra cách tôi có thể thực hiện việc này trong Android.

+0

lại: Tiền thưởng, cần phải hoạt động ở mức tối thiểu là 2,2, nhưng khả năng tương thích với các phiên bản mới hơn cũng quan trọng. –

+1

Chỉ cần FYI http://stackoverflow.com/questions/1968399/can-i-overlay-google-logo-on-map-or-move-it-to-top-right Xem câu trả lời AtomicCharles. –

Trả lời

24

Google Maps SDK v2 dành cho Android bổ sung chức năng này.

Sử dụng GoogleMap.setPadding() để thêm đệm vào khu vực "hoạt động" (bao gồm biểu trưng của Google và thông báo bản quyền) trong khi vẫn lấp đầy vùng chứa đầy đủ.

https://developers.google.com/maps/documentation/android/map#map_padding

+1

điều này đã làm việc một điều trị! tôi cần một bảng điều khiển để trượt lên khi một điểm đánh dấu được nhấp vào, và gọi setPadding trên bản đồ và đi qua chiều cao tính toán của bảng điều khiển, di chuyển các điều khiển và biểu tượng trên bảng điều khiển. bản đồ cũng tự động tập trung vào điểm đánh dấu được nhấp đẹp. – speedynomads

+0

Một số người biết nếu có thể trong API V1? – lujop

+0

@lujop không có điều tương tự là không thể trong v1 – dzeikei

5

Từ các tài liệu:

protected final void onDraw(android.graphics.Canvas canvas) 

onDraw là phương pháp cuối cùng. Không thể ghi đè điều này.

Ngoài ra, bạn có thể hiển thị các nút bên dưới chế độ xem bản đồ trong bố cục phù hợp với phần dưới cùng của phụ huynh. Bằng cách này bạn có thể có các nút ở vị trí mà bạn thích và nó sẽ không che khuất logo google của bạn.

+0

Tôi thực sự không bao giờ nhận thấy từ khóa cuối cùng. Hóa ra là không thể làm những gì tôi muốn làm: ( – dzeikei

+0

Vấn đề khó chịu, với ABS thanh hành động chia tách với tính năng lớp phủ sẽ bao gồm logo do đó phanh các điều khoản. Vì vậy, tính năng lớp phủ không phải là một tùy chọn ở đây. – Warpzit

8

Tôi có cùng một vấn đề, nhưng bạn có thể đạt được những gì bạn muốn mà không xung đột với Điều khoản và điều kiện của Google. Điều quan trọng là đặt MapView của bạn trong một bố cục khung hình, như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"  
android:orientation="vertical" >   

<FrameLayout android:id="@+id/map_frame" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.7" >  

    <com.google.android.maps.MapView 
     android:id="@+id/map_view" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:enabled="true" 
     android:clickable="true"    
     android:apiKey="mySecretMapsApiKey"/> 

</FrameLayout> 

<ws.mentis.android.guardian.ui.MapNavBar 
    android:id="@+id/map_nav" 
    android:layout_width="fill_parent" 
    android:layout_height="70dip" 
    android:layout_gravity="bottom" 
    android:layout_weight="0.3" /> 

</LinearLayout> 

tôi đã có một số nút để bao gồm, vì vậy tôi tạo ra chúng trong một widget tùy chỉnh (MapNavBar). Như bạn có thể thấy từ ảnh chụp màn hình, logo Google vẫn hiển thị và ở vị trí bình thường của nó, trong cửa sổ mới.

Screenshot of MapView

này đang làm việc trong Android 2.2 Nó cũng có những lợi ích mà điều khiển zoom tiêu chuẩn cũng di chuyển lên để nó không can thiệp với các nút của riêng bạn.

+0

Có, bạn có thể làm điều đó nhưng nó không phải là bố trí tôi đã yêu cầu trong câu hỏi :) – dzeikei

+0

Nhưng nó vẫn mang lại cho bạn một cách để đạt được kết quả cuối cùng mà bạn muốn. –

+0

Chức năng, vâng, không. – dzeikei

0

Kind của một hack, nhưng bạn có thể thử thêm một MapView nó vào một FrameLayout, thiết lập chiều cao của MapView X dp lớn hơn FrameLayout nên nó bị cắt bớt đi, và thêm một Logo Drawable bất cứ nơi nào bạn muốn nó được.

1

Câu hỏi thực sự cũ, nhưng có thể ai đó sẽ tận dụng nó.Tôi đã làm cho nó xuất hiện ở bên phải góc trên bên:

Rect rect = new Rect() 
mMapView.getLocalVisibleRect(rect) 
googleMap.setPadding(rect.width() - 100, 0, 0, rect.height() - 50) 

Nếu bạn muốn đặt nó ở một nơi khác, bạn sẽ cần phải có vui vẻ với setPadding

Cũng đừng quên để ẩn nút UI của bản đồ google :

googleMap.getUiSettings().setMapToolbarEnabled(false) 
googleMap.getUiSettings().setZoomControlsEnabled(false) 
googleMap.getUiSettings().setMyLocationButtonEnabled(false) 

Có một vấn đề (ít nhất). Khi sử dụng máy ảnh để căn giữa bản đồ vào điểm đã cho sẽ không hoạt động bình thường. Nếu cần di chuyển máy ảnh thì sẽ tốt hơn nếu chỉ đặt đệm vào mảnh bản đồ có thể nhìn thấy và nó sẽ hoạt động bình thường. Sử dụng chế độ chỉnh sửa để biết kích thước nào được đặt vào setPadding

2

Bạn có thể di chuyển biểu trưng của google bằng sự trợ giúp của Thẻ được gán cho nó GoogleWatermark. Trong mã dưới đây tôi đã di chuyển nó đến góc trên bên phải của màn hình.

View googleLogo = binding.missionMap.findViewWithTag("GoogleWatermark"); 
RelativeLayout.LayoutParams glLayoutParams = (RelativeLayout.LayoutParams)googleLogo.getLayoutParams(); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 0); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_START, 0); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END, RelativeLayout.TRUE); 
googleLogo.setLayoutParams(glLayoutParams); 

trong đó missionMap là framelayout mà MapFragment đã được thêm vào.

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