内容简介:组件式开发框架,兼容手机、平板多种设备。
RuntimeViewer
—— 基于ArcGIS Runtime 100.x开发的移动应用程序框架
组件式开发框架,兼容手机、平板多种设备。
平板模式
手机模式
如何快速运行应用程序?
- 使用git工具下来工程并将工程导入Android Studio
- 拷贝工程目录下/readme/工程结构示例/RuntimeViewer到手机存储根目录下(因为示例程序数据源均为离线)
- 运行应用程序
框架使用说明
项目采用插件化结构设计,文件夹架构说明如下
- Base —— 应用程序基类
- BMOD —— 业务功能模块
- MapModule —— 地图模块
- ProjectsModule —— 工程列表模块
- RootAct —— 应用程序启动页
- SystemModule —— 系统功能模块
- Common —— 公共功能
- Config —— App配置信息、初始化信息
- EventBus —— 事件中心
- GloabApp —— 应用程序全局信息Application
- Permission —— 权限控制
- Utils —— 工具类
- Widget —— 功能组件文件夹
- Common —— 公共功能
- LayerManagerWidget —— 图层管理
- ……
配置文件说明
<?xml version="1.0" ?> <!-- App配置文件 --> <configuration> <!--Runtime 许可--> <runtimekey license="runtimestandard,101,rud406482271,none,KGC63PJS3MLFLMZ59141"/> <!--系统工作空间目录--> <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="Hello World" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/> </widgetcontainer> </configuration>
说明:
- runtimekey的license为ArcGIS Runtime 1000.x许可信息,请获取后替换。
- workspace的path为系统工作空间目录,设置后app会自动初始化文件夹结构信息
- widget模块,label为应用程序名称,classname为对应widget类实体,程序加载过会自动初始化。必须填写。
框架功能模块开发
widget开发
1. 创建widget组件类
在Widgets目录下创建HelloWorldWidget.java文件并添加以下内容。 建议类名的命名规则为 [业务名称+Widget].java 以保证统一。
/** * 测试用组件 * Created by gis-luq on 2018/3/10. */ public class HelloWorldWidget extends BaseWidget { public View mWidgetView = null;// /** * 组件面板打开时,执行的操作 * 当点击widget按钮是, WidgetManager将会调用这个方法,面板打开后的代码逻辑. * 面板关闭将会调用 "inactive" 方法 */ @Override public void active() { super.active();//默认需要调用,以保证切换到其他widget时,本widget可以正确执行inactive()方法并关闭 super.showWidget(mWidgetView);//加载UI并显示 super.showMessageBox(super.name);//显示组件名称 } /** * widget组件的初始化操作,包括设置view内容,逻辑等 * 该方法在应用程序加载完成后执行 */ @Override public void create() { LayoutInflater mLayoutInflater = LayoutInflater.from(super.context); //设置widget组件显示内容 mWidgetView = mLayoutInflater.inflate(R.layout.widget_view_helloworld,null); } /** * 组件面板关闭时,执行的操作 * 面板关闭将会调用 "inactive" 方法 */ @Override public void inactive(){ super.inactive(); } }
2. 创建widget组件UI
在android工程的layout文件夹下创建widget_view_helloworld.xml文件,并添加如下内容。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_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>
3、配置文件中添加对应内容
assents/config.xml下添加以下内容:
<widget label="Hello World" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>
widget整体效果
widget操作Mapview对象
每一个widget扩展了父类BaseWidget。使用以下方法就可以获取并操作mapview对象中的内容。
super.sceneView.getScene().getBasemap().getBaseLayers(); super.sceneView.getScene().getOperationalLayers();
widget通信
widget通信通过引入EventBus 3.0实现。基本使用如下:
1. 订阅
EventBus.getDefault().register(this);//订阅
2. 解除订阅
EventBus.getDefault().unregister(this);//解除订阅
3. 发布事件
EventBus.getDefault().post(new MessageEvent("事件说明"));
4. 订阅事件处理
@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行 public void onDataSynEvent(MessageEvent event) { Log.e(TAG, "event---->" + event.getMessage()); //通过判断message内容执行不同方法 }
ThreadMode总共四个:
- MAIN UI主线程
- BACKGROUND 后台线程
- POSTING 和发布者处在同一个线程
- ASYNC 异步线程
5. 订阅事件优先级
事件的优先级类似广播的优先级,优先级越高优先获得消息
@Subscribe(threadMode = ThreadMode.MAIN,priority = 100) //在ui线程执行 优先级100 public void onDataSynEvent(DataSynEvent event) { Log.e(TAG, "event---->" + event.getCount()); }
更多内容请参考EventBus 3.0详细相关材料: https://www.cnblogs.com/whoislcj/p/5595714.html
Widget示例
图层管理 LayerManagerWidget
实现功能包括:基础底图数据加载、业务图层加载(目前仅支持Shapefile),图层开启关闭、透明度控制、图例等。
底图数据支持数据类型
- tpk - LocalTiledPackage
- server切片 - LocalServerCache
- tiff - LocalGeoTIFF
- 在线切片服务 - OnlineTiledMapServiceLayer
- 在线动态图层 - OnlineDynamicMapServiceLayer
底图数据通过加载basemap.json实现,系统根目录/RuntimeViewer/XXX工程/BaseMap/basemap.json
文件内容如下,相关底图离线文件放在basemap.json所在文件夹即可。
{ "baselayers": [ { "name": "彩色中文含兴趣点版中国基础地图", "type": "OnlineTiledMapServiceLayer", "path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer", "layerIndex": 2, "visable": true, "opacity": 1 }, { "name": "午夜蓝色中文不含兴趣点版中国基础地图", "type": "OnlineTiledMapServiceLayer", "path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer", "layerIndex": 3, "visable": false, "opacity": 1 } ] }
以上所述就是小编给大家介绍的《码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Socket.IO 2.0 发布,实时应用程序框架
- Socket.IO 2.0 发布,实时应用程序框架
- Ionic 4.4.0 发布,开源移动应用程序开发框架
- [译] 使用 JS 框架创建渐进式 Web 应用程序(PWA)
- LightBulb:一个用于审计web应用程序防火墙的开源框架
- Qt-跨平台的C++图形用户界面应用程序框架(一)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。