مستندات جامع اندروید
نسخه 1.0.3
هدف این بخش از پروژه، رسم یک چندضلعی بر روی نقشه است. مانند بخشهای قبل، بخشهایی که در کدهای قبلی نیز موجود است دوباره توضیح داده نشده است.
activity_draw_polygon.xml
:
یک دکمه به این صفحه اضافه شده است که در صورت فشار داده شدن، متد drawPolygon
صدا زده میشود و یک چندضلعی از پیش تعریف شده بر روی نقشه نمایش داده میشود.
<?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:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.DrawPolygonActivity">
<org.neshan.mapsdk.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ToggleButton
android:id="@+id/drawPolygon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_button_bg"
android:padding="5dp"
android:onClick="drawPolygon"
android:textOff="رسم چند ضلعی"
android:textOn="حذف چند ضلعی"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
DrawPolygonActivity.kt
:
متد initLayoutRefrences
جهت مقداردهی اولیه به تمامی المانهای مربوط به رابط کاربری نوشته شدهاست. به دلیل این که لازم است تا المان اندرویدی نقشه نشان ابتدا به طور کامل ایجاد شود و سپس با آن تعامل برقرار شود (متدهای مختلف بر روی المان نقشه اجرا شود)، تمامی متدهای مربوط به رابط کاربری باید در متد onStart
انجام شوند.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_draw_polygon)
}
override fun onStart() {
super.onStart()
// everything related to ui is initialized here
initLayoutReferences()
}
متد drawPolygon
یک چندضلعی از پیش تعریف شده را بر روی نقشه نمایش میدهد.
به این منظور ابتدا اگر متغیر polygon
از قبل حاوی شی باشد ( null نباشد )، آن شکل را با استفاده از متد removePolygon
از روی نقشه حذف میکند. سپس یک <ArrayList<LatLng
– که لیستی از نقاط جغرافیایی است – ساخته میشود و چهار نقطه (راسهای چندضلعی) به این لیست اضافه میشود.
با استفاده از لیست نقاط ساخته شده و استایلی که از متد getPolygonStyle
( که در ادامه توضیح داده خواهد شد) گرفته می شود یک چندضلعی یا Polylgon
ساخته میشود.
چندضلعی ساخته شده به با استفاده از متد addPolygon
به map
اضافه میشود که با این کار، چندضلعی بر روی نقشه نشان داده خواهد شد.
در نهایت دوربین بر روی اولین نقطه چندضلعی متمرکز می شود. بزرگنمایی دوربین برابر با ۱۴ است.
fun drawPolygon(view: View) {
var toggleButton = view as ToggleButton
if (toggleButton.isChecked) {
var latLngs = ArrayList<LatLng>()
latLngs.add(LatLng(35.762294, 51.325525))
latLngs.add(LatLng(35.756548, 51.323768))
latLngs.add(LatLng(35.755394, 51.328617))
latLngs.add(LatLng(35.760905, 51.330666))
polygon = Polygon(latLngs, getPolygonStyle())
map.addPolygon(polygon)
map.moveCamera(LatLng(35.762294, 51.325525), .5f)
} else {
if (polygon != null) {
map.removePolygon(polygon)
}
}
}
متد getPolygonStyle
استایل مورد نیاز برای چندضلعیهایی که قرار است رسم شوند را برمیگرداند. برای ایجاد style برای چندضلعیها، ابتدا یک شی از کلاس PolygonStyleBuilder
ساخته میشود. ویژگیهای چندضلعی بر روی این شی set میشوند. در اینجا تنها ویژگی، style خطوط تشکیل دهنده یک چند ضلعی است که با استفاده از متد getLineStyle
به دست میآیند. این متد در بخش رسم خط توضیح داده شده است.
private fun getPolygonStyle(): PolygonStyle {
var polygonStyleBuilder = PolygonStyleBuilder()
polygonStyleBuilder.lineStyle = getLineStyle()
polygonStyleBuilder.color = Color(2, 130, 189, 190)
return polygonStyleBuilder.buildStyle()
}
حذف چند ضلعی
برای حذف چند ضلعی ترسیم شده روی نقشه میتوانید از متد removePolygon استفاده نمایید.
map.removePolygon(polygon)