این صفحه نمونهای از نحوه افزودن نقشه سهبعدی پایه به برنامه Android بااستفاده از «کیت توسعه نرمافزار سهبعدی نقشه برای Android» را نشان میدهد. دستورالعملهای این صفحه فرض میکنند که قبلاً مراحل صفحه راهاندازی را تکمیل کردهاید و موارد زیر را دارید:
- پروژه Google Cloud با «کیت توسعه نرمافزار ۳ بعدی نقشه برای Android» فعالشده
- کلید میانای برنامهسازی کاربردی پیکربندیشده برای استفاده با کیت توسعه نرمافزار سهبعدی Maps برای Android
- پروژه «استودیو Android» برای استفاده با «کیت توسعه نرمافزار ۳ بعدی نقشه برای Android» راهاندازی شده است
برای اطلاعات بیشتر درباره این پیشنیازها، به راهاندازی مراجعه کنید.
بخش ۱: بهروزرسانی فایل چیدمان (activity_main.xml) برای افزودن مؤلفه Map3DView
عنصر Map3DView نمایی است که نقشه سهبعدی را در برنامه ارائه میکند.
مراحل زیر عنصر را اضافه میکند و وضعیت اولیه نقشه را پیکربندی میکند، ازجمله موقعیت دوربین و ویژگیهای مرتبط:
فایل چیدمان فعالیت اصلیتان را باز کنید، که معمولاً در
app/src/main/res/layout/activity_main.xmlقرار دارد.در ریشه
ConstraintLayout(یا عنصر چیدمان ریشه)، فضای نام XMLmap3dرا اضافه کنید: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 در بخش ۱ را مقداردهی اولیه میکند و رویدادهای چرخه حیات مؤلفه را مدیریت میکند.
توجه داشته باشید که «کیت توسعه نرمافزار ۳ بعدی نقشه برای 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 را کاوش کنید، ازجمله پویانماییهای مسیر دوربین، نشانگرهای سهبعدی، یا چندضلعیها.