لایه اطلاعات کسب و کارها (POI)

مستندات جامع اندروید

نسخه 1.0.3

هدف از این بخش از پروژه بررسی نحوه فعال‌سازی و غیرفعال‌سازی لایه اطلاعات کسب و کارها و بررسی دو حالت نمایش روشن و تاریک در این لایه است.

activity_poi_layer.xml:

در این صفحه، علاوه بر المان نقشه نشان، یک ToggleButton برای فعال‌ یا غیرفعال کردن لایه اطلاعات کسب و کارها وجود دارد. همچنین یک ImageView برای تغییر استایل نقشه و به طور همزمان تغییر استایل لایه اطلاعات کسب و کارها وجود دارد.

            <?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.POILayer">

    <org.neshan.mapsdk.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="لایه POI"
        android:textOn="لایه POI"
        android:elevation="8dp"
        android:paddingStart="8dp"
        android:paddingEnd="8dp"
        android:drawableStart="@drawable/ic_poi_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="togglePOILayer"/>

    <android.support.v7.widget.CardView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:cardCornerRadius="4dp"
        app:cardElevation="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent">

        <ImageView
            android:id="@+id/theme_preview"
            android:layout_width="75dp"
            android:layout_height="75dp"
            android:scaleType="centerCrop"
            android:onClick="changeStyle"/>

    </android.support.v7.widget.CardView>

</android.support.constraint.ConstraintLayout>
        

POILayer.java:

‏ متغیرthemePreview جهت نمایش پیش‌نمایش حالت بعدی نقشه است و متغییرisPOIEnable برای نشان‌دادن این که لایه اطلاعات کسب و کارها فعال است یا خیر، استفاده می‌شود.

                // map style control
    private ImageView themePreview;
    private boolean isPOIEnable = true;
        

متد 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_poi_layer);
    }
@Override
    protected void onStart() {
        super.onStart();
        // everything related to ui is initialized here
        initLayoutReferences();
    }
        

پس از مقداردهی اولیه viewها و نقشه نشان، متد validateThemePreview صدا زده می‌شود. این متد پیش‌نمایش نقشه بعدی را در themePreview نشان می‌دهد و در صفحه تغییر استایل نقشه توضیح داده شده است.

            // Initializing layout references (views, map and map events)
    private void initLayoutReferences() {
        // Initializing views
        initViews();
        // Initializing mapView element
        initMap();
        // Initializing theme preview
        validateThemePreview();
    }
        

در متد initMap ابتدا موقعیت و بزرگنمایی نقشه به حالت دلخواه تنظیم می شود. سپس لایه اطلاعات کسب و کار ها با استفاده از متد setPoiEnabled فعال می گردد و در خط آخر هم استایل فعلی نقشه در متغیر mapStyle جهت استفاده های بعدی ذخیره می شود

            // Initializing map
    private void initMap(){
        // Setting map focal position to a fixed position and setting camera zoom
        map.moveCamera(new LatLng(35.767234, 51.330743),0 );
        map.setZoom(14,0);
        map.setPoiEnabled(true);
        mapStyle=map.getMapStyle();
    }
        

در این متد بررسی می‌شود که اگر toggleButton موجود در رابط کاربری در حالت انتخاب شده باشد، لایه اطلاعات کسب و کارها با استفاده از متد setPoiEnabled شیء map فعال می شود و در غیر اینصورت این لایه غیرفعال می شود.

            public void togglePOILayer(View view) {
        ToggleButton toggleButton = (ToggleButton) view;
        isPOIEnable = !isPOIEnable;
        if (toggleButton.isChecked())
            map.setPoiEnabled(true);
        else
            map.setPoiEnabled(false);
    }
        
            public void changeStyle(View view) {
        switch (mapStyle) {
            case NeshanMapStyle.STANDARD_DAY:
                mapStyle = NeshanMapStyle.NESHAN_NIGHT;
                break;
            case NeshanMapStyle.NESHAN_NIGHT:
                mapStyle = NeshanMapStyle.NESHAN;
                break;
            case NeshanMapStyle.NESHAN:
                mapStyle = NeshanMapStyle.STANDARD_DAY;
                break;
        }
        runOnUiThread(() -> validateThemePreview());
        map.setMapStyle(mapStyle);
    }
        

فهرست مطالب این صفحه

فهرست مطالب این صفحه