-
Notifications
You must be signed in to change notification settings - Fork 0
لایه ترافیک
activity_traffic_layer.xml
در این صفحه علاوه بر المان نقشه نشان یک ToggleButton
وجود دارد که با هر بار لمس شدنش، متد toggleTrafficLayer
فراخوانی میشود و لایه ترافیک اضافه و حذف میشود.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".activity.TrafficLayer">
<org.neshan.ui.MapView
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/map"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<ToggleButton
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/toggle_button_text_color"
android:textOff="لایه ترافیک"
android:textOn="لایه ترافیک"
android:elevation="8dp"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:drawableStart="@drawable/ic_traffic_layer"
android:drawableTint="@color/toggle_button_text_color"
android:drawablePadding="8dp"
android:background="@drawable/toggle_button_bg"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:targetApi="m"
android:onClick="toggleTrafficLayer"/>
</android.support.constraint.ConstraintLayout>
TrafficLayer.java
اندیس شماره ۰ برای نمایش نقشه و اندیس شماره ۱ برای نمایش لایه ترافیک در نظر گرفته میشود.
// layer number in which map is added
final int BASE_MAP_INDEX = 0;
final int TRAFFIC_INDEX = 1;
متد initLayoutRefrences
جهت مقداردهی اولیه کردن به تمامی المانهای مربوط به رابط کاربری نوشته شدهاست.
به دلیل این که لازم است تا المان اندرویدی نقشه نشان ابتدا به طور کامل ایجاد شود و سپس با آن تعامل برقرار شود (متدهای مختلف بر روی المان نقشه اجرا شود)، تمامی متدهای مربوط به رابط کاربری باید در متد onStart
انجام شوند.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// starting app in full screen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_traffic_layer);
}
@Override
protected void onStart() {
super.onStart();
// everything related to ui is initialized here
initLayoutReferences();
}
برای ایجاد لایه ترافیک، متد createTrafficLayer
از کلاس NeshanServices
صدا زده میشود.
لایههای موجود در map
گرفته شده و متد insert
با ورودیهای شماره لایه - که در اینجا در ثابت TRAFFIC_INDEX
ذخیره شده است - و لایه ترافیک - که خروجی متد createTrafficLayer
بود - صدا زده میشود.
به این ترتیب لایه ترافیک روی لایه نقشه نشان داده خواهد شد.
// Initializing map
private void initMap(){
// add Standard_day map to layer BASE_MAP_INDEX
map.getOptions().setZoomRange(new Range(4.5f, 18f));
map.getLayers().insert(BASE_MAP_INDEX, NeshanServices.createBaseMap(NeshanMapStyle.STANDARD_DAY));
// Setting map focal position to a fixed position and setting camera zoom
map.setFocalPointPosition(new LngLat(51.330743, 35.767234),0 );
map.setZoom(14,0);
// adding traffic layer to TRAFFIC_INDEX
map.getLayers().insert(TRAFFIC_INDEX, NeshanServices.createTrafficLayer());
}
در این متد بررسی میشود که اگر toggleButton
انتخاب شده باشد، لایه ترافیک ساخته شده و به لایه شماره TRAFFIC_INDEX
نقشه اضافه میشود و در صورتی که انتخاب نشده باشد، لایه شماره TRAFFIC_INDEX
از لایههای نقشه حذف میشود.
public void toggleTrafficLayer(View view) {
ToggleButton toggleButton = (ToggleButton) view;
if (toggleButton.isChecked())
map.getLayers().insert(TRAFFIC_INDEX, NeshanServices.createTrafficLayer());
else
map.getLayers().remove(map.getLayers().get(TRAFFIC_INDEX));
}