این صفحه مثالی از نحوه افزودن نقشه سهبعدی پایه به برنامه Android بااستفاده از «کیت توسعه نرمافزار ۳ بعدی نقشه برای Android» را ارائه میدهد. دستورالعملهای این صفحه فرض میکنند که قبلاً مراحل موجود در صفحه راهاندازی را تکمیل کردهاید و موارد زیر را دارید:
- پروژه Google Cloud با «کیت توسعه نرمافزار ۳ بعدی نقشه» برای Android فعال شده باشد
- کلید میانای برنامهسازی کاربردی پیکربندیشده برای استفاده با کیت توسعه نرمافزار سهبعدی Maps برای Android
- پروژه Android Studio که برای استفاده با «کیت توسعه نرمافزار ۳ بعدی نقشه برای Android» راهاندازی شده است
برای اطلاعات بیشتر درباره این پیشنیازها، به راهاندازی مراجعه کنید.
بخش ۱: بهروزرسانی فایل چیدمان (activity_main.xml) برای افزودن مؤلفه Map3DView
عنصر Map3DView نمایی است که نقشه سهبعدی را در برنامه ارائه میکند.
مراحل زیر عنصر را اضافه میکند و وضعیت اولیه نقشه را پیکربندی میکند، ازجمله موقعیت دوربین و ویژگیهای مرتبط:
فایل چیدمان فعالیت اصلیتان را باز کنید، که معمولاً در
app/src/main/res/layout/activity_main.xmlقرار دارد.در ریشه
ConstraintLayout(یا عنصر چیدمان ریشه)،map3dفضای نام «زبان نشانهگذاری توسعهپذیر» را اضافه کنید:xmlns:map3d="http://schemas.android.com/apk/res-auto"<TextView>پیشفرض را که «سلام دنیا!» را نمایش میدهد حذف کنید.عنصر
Map3DViewرا به چیدمانتان اضافه کنید. میتوانید موقعیت دوربین و سایر مشخصهها را سفارشیسازی کنید:<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:map3d="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.google.android.gms.maps3d.Map3DView android:id="@+id/map3dView" android:layout_width="match_parent" android:layout_height="match_parent" map3d:mapMode="hybrid" map3d:centerLat="38.544012" map3d:centerLng="-107.670428" map3d:centerAlt="2427.6" map3d:heading="310" map3d:tilt="63" map3d:range="8266" map3d:roll="0" map3d:minAltitude="0" map3d:maxAltitude="1000000" map3d:minHeading="0" map3d:maxHeading="360" map3d:minTilt="0" map3d:maxTilt="90" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
بخش ۲: بهروزرسانی MainActivity.kt
مراحل زیر مؤلفه Map3DView اضافهشده به فایل activity_main.xml در بخش ۱ را مقداردهی اولیه میکند و رویدادهای چرخه حیات مؤلفه را مدیریت میکند.
توجه داشته باشید که «کیت توسعه نرمافزار ۳ بعدی Maps برای Android» در هر زمان فقط از یک نمونه فعال Map3DView پشتیبانی میکند. نمایش همزمان چند نمونه Map3DView (برای مثال، در یک چیدمان یا در «فعالیتها» یا «قطعات» قابلمشاهده متفاوت) پشتیبانی نمیشود و میتواند به مشکلات پردازش منجر شود، مثل صفحههای سیاه در نماهای ثانویه.
علاوهبراین، همه Map3DView وضعیت نقشه یکسانی را همرسانی و منعکس خواهند کرد (مثلاً
موقعیت دوربین، نشانگرهای اضافهشده، چندضلعیها، و غیره)، که حتی اگر یک
Map3DView ازبین برود (بااستفاده از onDestroy) و دیگری ایجاد شود، باقی خواهد ماند، مگراینکه
بهصورت دستی پاک شود. برای مثال، اگر به Map3DView1 نشانگر اضافه کنید، سپس آن را ازبین ببرید
و Map3DView2 را ایجاد کنید، همان نشانگرها همچنان در Map3DView2 وجود خواهند داشت.
مسئولیتهای توسعهدهنده:
- یک نما در هر زمان: مطمئن شوید که در هر لحظه فقط یک
Map3DViewدر بخش فعال سلسلهمراتب نمای شما وجود دارد. - پاکسازی دستی: هنگام جابهجایی از یک
Map3DView(برای نمونه،Map3DView1) به دیگری (برای نمونه،Map3DView2)، بایدonDestroy()را در نمونه قدیمی (Map3DView1) فراخوانی کنید. ازآنجاییکه وضعیت نقشه زیرین همرسانی میشود، برای اطمینان از اینکهMap3DView2با وضعیت جدید یا خاصی شروع میشود، مسئولیت پاک کردن دستی هر وضعیتی که توسطMap3DView1تنظیم شده است برعهده شما است. این شامل برداشتن نشانگرها، رونهادها، و غیره، و بازنشانی موقعیت دوربین بااستفاده از شیءGoogleMap3Dبهدستآمده درOnMap3DViewReadyCallbackمیشود.
فایل
MainActivity.ktرا باز کنید، که معمولاً درapp/src/main/java/com/example/yourpackagename/MainActivity.ktقرار دارد.واردات لازم برای کیت توسعه نرمافزار Maps 3D ویژه Android را اضافه کنید:
import android.util.Log import com.google.android.gms.maps3d.GoogleMap3D import com.google.android.gms.maps3d.Map3DView import com.google.android.gms.maps3d.OnMap3DViewReadyCallbackکلاس
MainActivityرا برای پیادهسازیOnMap3DViewReadyCallbackاصلاح کنید:class MainActivity : AppCompatActivity(), OnMap3DViewReadyCallback {متغیرهای
Map3DViewوGoogleMap3Dرا اعلام کنید:private lateinit var map3DView: Map3DView private var googleMap3D: GoogleMap3D? = nullدر روش
onCreate، پسازsetContentView(...)و بلوکViewCompat.setOnApplyWindowInsetsListener،map3DViewرا مقداردهی اولیه کنید، روش چرخه حیاتonCreateآن را فراخوانی کنید، و نقشه را بهصورت ناهمگام درخواست کنید:override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.activity_main) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } map3DView = findViewById(R.id.map3dView) map3DView.onCreate(savedInstanceState) map3DView.getMap3DViewAsync(this) }روشهای
onMap3DViewReadyوonErrorرا ملغی کنید. این فراخوانیهای برگشتی زمانی راهاندازی میشوند که نقشه آماده استفاده باشد یا وقتی خطایی درطول مقداردهی اولیه رخ دهد:override fun onMap3DViewReady(googleMap3D: GoogleMap3D) { // Interact with the googleMap3D object here this.googleMap3D = googleMap3D // You can now make calls to the googleMap3D object, e.g., // googleMap3D.flyTo(camera { ... }) } override fun onError(error: Exception) { // Handle the error gracefully here (for example, show an error dialog or log the error). Log.e("MainActivity", "Error loading 3D map", error) }رویدادهای چرخه حیات را از «فعالیت» خود به
Map3DViewبازارسال کنید. برای این کار، موارد لغو زیر را بهMainActivityاضافه کنید:override fun onStart() { super.onStart() map3DView.onStart() } override fun onResume() { super.onResume() map3DView.onResume() } override fun onPause() { map3DView.onPause() super.onPause() } override fun onStop() { map3DView.onStop() super.onStop() } override fun onDestroy() { map3DView.onDestroy() super.onDestroy() } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) map3DView.onSaveInstanceState(outState) } override fun onLowMemory() { super.onLowMemory() map3DView.onLowMemory() }
بخش ۳: همگامسازی Gradle و اجرا
اکنون که چیدمان و فعالیت برنامهتان را بهروز کردهاید، میتوانید برنامه را بسازید و اجرا کنید تا نمای سهبعدی نقشه را ببینید.
برای همگامسازی کردن پروژه با Gradle، فایل > همگامسازی پروژه با فایلهای Gradle را انتخاب کنید.
برای ساختن و اجرای برنامهتان در شبیهساز یا دستگاه فیزیکی، اجرا > اجرا را انتخاب کنید.
اگر همهچیز بهدرستی پیکربندی شده باشد، باید نقشه سهبعدی را در
برنامهتان ببینید که در مرکز مختصات مشخصشده در
activity_main.xml قرار دارد.
وضعیتهای بار کردن نقشه و خطا
کیت توسعه نرمافزار ۳ بعدی نقشه برای Android بهطور خودکار بازخورد دیداری داخلی را هنگام مدیریت وضعیت نقشه نمایش میدهد:
- بار کردن همپوشانی: وقتی نمای نقشه برای اولینبار مقداردهی اولیه میشود یا نمای اولیه آن بار میشود، یک نشانگر پیشرفت در مرکز نمایش داده میشود.
- رونهاد خطا: اگر خطای مهمی رخ دهد، مثل کلید نامعتبر API، خطای شبکه، یا اجرا در دستگاه پشتیبانینشده، کارت خطای سبکدار نمایش داده میشود.
میتوانید این خطاهای مقداردهی اولیه یا بار کردن را با لغو کردن onError(error:
Exception) در پیادهسازی OnMap3DViewReadyCallback بهصورت برنامهنویسیشده ضبط کنید.
گوش دادن به رویدادهای کلیک نقشه
برای گوش دادن به رویدادهای کلیک در نقشه،
setMap3DClickListener
را در
GoogleMap3D فراخوانی کنید.
وقتی کاربر روی نقشه کلیک میکند،
onMap3DClick
فراخوان برگشتی یک شیء
Map3DClickEvent
دریافت میکند که
location
و
placeId
نقطه کلیکشده را ارائه میدهد و یک Boolean برمیگرداند (true برای سرکوب کردن ابزاره پیشفرض
واسط کاربر «مکانها»، یا false برای نمایش آن). برای اطلاعات بیشتر،
تعامل با نقاط جالب را ببینید.
مثال زیر نحوه تنظیم شنونده کلیک نقشه را نشان میدهد:
googleMap3D.setMap3DClickListener { event: Map3DClickEvent ->
Log.d(
"MainActivity",
"Clicked at ${event.location}, placeId: ${event.placeId}"
)
false
}
مراحل بعدی
اکنون که نقشه سهبعدی پایه را به برنامهتان اضافه کردهاید، میتوانید ویژگیهای پیشرفتهتر «کیت توسعه نرمافزار سهبعدی Maps» برای Android را کاوش کنید، ازجمله پویانماییهای مسیر دوربین، نشانگرهای سهبعدی، یا چندضلعیها.