android tutorial نقل شعار Google في MapView




mapview android example (5)

يمكنك نقل شعار google بمساعدة العلامة المعينة إليه GoogleWatermark . في الكود أدناه ، انتقلت إلى أعلى يمين الشاشة.

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);

حيث تعد missionMap هي framelayout التي تمت إضافة MapFragment إليها.

لديّ زرين في كل ركن من أركان MapView ، جزئياً يحجب شعار google في الزاوية السفلية اليسرى.

من أجل الامتثال لبنود وشروط واجهة برمجة التطبيقات ، أحتاج إلى نقل شعار google إلى مكان أكثر وضوحًا. أي فوق الزر.

ينص مستند google API على أن شعار google مرسوم بطريقة onDraw() في MapView ولكن ليس لدي أي فكرة عن كيفية تجاوزه بشكل صحيح نظرًا لأن خرائط google هي مصدر مغلق.

يمكنني القيام بذلك في iPhone عن طريق العثور على UIView الصحيح في أطفال MKMapView's ولكن لا أستطيع معرفة كيف يمكنني القيام بذلك في Android.


واجهت نفس المشكلة ، ولكن يمكنك تحقيق ما تريد دون التضارب مع بنود وشروط Google. الشيء الرئيسي هو وضع mapView الخاص بك في تخطيط الإطار ، مثل هذا:

<?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>

كان لدي عدد من الأزرار لتشمل ، لذلك أنا خلقت لهم في القطعة مخصصة (MapNavBar). كما ترى من لقطة الشاشة ، لا يزال شعار Google مرئيًا وفي مكانه الطبيعي ، داخل النافذة الجديدة.

يعمل هذا في Android 2.2 كما أنه يتمتع بالمزايا التي يتحكم بها أيضًا التحكم في التكبير القياسي بحيث لا يتداخل مع الأزرار الخاصة بك.


نوع من الاختراق ، ولكن يمكنك محاولة إضافة MapView إلى FrameLayout, وتحديد ارتفاع MapView X dp أكبر من FrameLayout حتى يتم قصها ، وإضافة شعار Drawable حيثما تريد.


تضيف Google Maps SDK v2 لنظام Android هذه الوظيفة.

استخدم GoogleMap.setPadding() لإضافة مساحة إلى المنطقة "النشطة" (بما في ذلك شعار Google وإشعارات حقوق الطبع والنشر) مع الاستمرار في ملء الحاوية الكاملة.

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


السؤال القديم حقا ، ولكن ربما شخص ما سوف تستفيد منه. جعلتها تظهر في الزاوية العلوية اليمنى:

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

إذا كنت ترغب في وضعها في مكان آخر ، سوف تحتاج إلى قضاء وقت ممتع مع SetPadding

لا تنس أيضًا إخفاء أزرار واجهة المستخدم لخرائط google:

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

هناك مشكلة واحدة (على الأقل). عند استخدام الكاميرا لمركز الخريطة على نقطة معينة لن تعمل بشكل صحيح. إذا كانت هناك حاجة لحركة الكاميرا ، فسيكون من الأفضل تعيين الحشو على جزء الخريطة المرئي ويجب أن يعمل بشكل صحيح. استخدم المستقيم لمعرفة أبعاد وضعه في setPadding