Компонентный фреймворк разработки, совместимый с различными устройствами, такими как смартфон и планшет.
Проект использует плагинную архитектуру, описание структуры файлов приведено ниже
<?xml version="1.0" ?>
<!--
Файл конфигурации приложения
-->
<configuration>
<!--Разрешение Runtime-->
<runtimekey license="информация лицензии"/>
<!--Системная рабочая директория-->
<workspace path="/RuntimeViewer"/>
<!--Контейнер компонентов widget-->
<widgetcontainer>
<widget label="Управление слоями" classname="com.gisluq.runtimeviewer.Widgets.LayerManagerWidget.LayerManagerWidget" config=""/>
<widget label="Информация о проектах" classname="com.gisluq.runtimeviewer.Widgets.ProjectInfoWidget.ProjectInfoWidget" config=""/>
<widget label="Привет, мир!" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>
</widgetcontainer>
</configuration>
Объяснение:
runtimekey
значение license
должно содержать информацию о лицензии ArcGIS Runtime 10.x, которую следует получить и заменить.workspace
значение path
должно указывать на системную рабочую директорию, после чего приложение автоматически инициализирует структуру файлов.widget
, метка должен содержать имя приложения, classname
— имя соответствующего класса компонента, который будет автоматически инициализирован при загрузке. Это поле обязательно для заполнения.Создайте файл HelloWorldWidget.java
в директории Widgets со следующим содержимым.
Рекомендация по названию класса: [Название бизнеса] + Widget.java
, чтобы обеспечить единообразие.```java
/**
Example component
Created by gis-luq on 2018/3/10. */ public class HelloWorldWidget extends BaseWidget {
public View mWidgetView = null;
/**
Operations performed when the panel of the component opens
When the widget button is pressed, WidgetManager calls this method to start the logic after opening the panel.
The "inactive" method will be called upon closing the panel. */ @Override public void active() {
super.active(); // By default, it must be called to ensure proper execution of inactive() when switching to another widget super.showWidget(mWidgetView); // Loading and displaying the UI super.showMessageBox(super.name); // Displaying the name of the component }
/**
/**
#### 2. Создание UI компонента виджета
Создайте файл `widget_view_helloworld.xml` в папке layout вашего Android проекта с указанным ниже содержимым.
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
``` <LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Информация" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp">
``` <Button
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="Целевое позиционирование"
android:id="@+id/widget_view_helloworld_button2"
android:background="@drawable/ic_touch_btn"
android:textColor="@color/white" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
Добавьте следующий контент в assets/config.xml
:
<widget label="Привет, мир!" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>
Общее представление виджета
Каждый виджет расширяет родительский класс BaseWidget. Используйте следующие методы, чтобы получить доступ к объекту mapview и выполнять операции над ним.
super.sceneView.getScene().getBasemap().getBaseLayers();
super.sceneView.getScene().getOperationalLayers();
Коммуникацию между виджетами реализует EventBus 3.0. Базовое использование представлено ниже:
EventBus.getDefault().register(this); //Подписаться
EventBus.getDefault().unregister(this); //Отписаться
```#### 3. Отправить событие
```java
EventBus.getDefault().post(new MessageEvent("Описание события"));
@Subscribe(threadMode = ThreadMode.MAIN) //Выполняется в UI потоке
public void onDataSynEvent(MessageEvent event) {
Log.e(TAG, "event---->" + event.getMessage());
// Выполнение различных методов в зависимости от содержимого сообщения
}
Параметр threadMode
имеет четыре значения:
MAIN
— UI главный потокBACKGROUND
— фоновый потокPOSTING
— тот же поток, что и отправительASYNC
— асинхронный потокПриоритет события аналогичен приоритету широковещательной рассылки, то есть события с более высоким приоритетом получают сообщение первыми.
@Subscribe(threadMode = ThreadMode.MAIN, priority = 100) //Выполняется в UI потоке с приоритетом 100
public void onDataSynEvent(DataSynEvent event) {
Log.e(TAG, "event---->" + event.getCount());
}
Дополнительные материалы можно найти здесь: https://www.cnblogs.com/whoislcj/p/5595714.html
Функциональность включает базовую загрузку данных карты, загрузку слоев бизнеса (в настоящее время поддерживаются только Shapefile), управление активностью слоев, регулирование прозрачности слоев, легенд и т.д.
{
"baselayers": [
{
"name": "Цветной китайский картографический слой с интересными местами",
"type": "OnlineTiledMapServiceLayer",
"path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer",
"layerIndex": bkz,
"visible": true,
"opacity": 1
},
{
"name": "Ночной синий китайский картографический слой без интересных мест",
"type": "OnlineTiledMapServiceLayer",
"path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer",
"layerIndex": bkz,
"visible": false,
"opacity": 1
}
]
}
Исправленный текст:
##### Основной слой данных загружается через basemap.json, который находится в корневой директории системы /RuntimeViewer/XXX проекта/BaseMap/basemap.json.
Контент файла представлен ниже, а связанные файлы основного слоя должны находиться в той же папке, где расположен basemap.json.
```json
{
"baselayers": [
{
"name": "Цветной китайский картографический слой с интересными местами",
"type": "OnlineTiledMapServiceLayer",
"path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer",
"layerIndex": 2,
"visible": true,
"opacity": 1
},
{
"name": "Ночной синий китайский картографический слой без интересных мест",
"type": "OnlineTiledMapServiceLayer",
"path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer",
"layerIndex": 3,
"visible": false,
"opacity": 1
}
]
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )