android平台 arcgisr_ArcGIS Runtime For Android 开发 (7)
第七課 圖層管理
在前邊的課程中,我們學習了如何加載圖層,符號化圖層,那么如果一個項目里邊包含了很多的圖層,但又需要進行查看特定的圖層,怎么辦?是的,我們需要對加載的圖層進行管理。
那么如何來實現圖層的管理?從地圖控件中獲取加載的圖層,然后把圖層綁定到一個列表控件上,然后點擊列表控件的選項控制圖層的顯示和隱藏就好了。思路有了,接下來就是動手實現了。
首先呢,我們設計圖層管理的布局。
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/overmaplyrmanage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
接下來,我們設計列表的綁定數據項布局。在列表中當我選中或者表示顯示時,有個狀態,未選中或者圖層隱藏時有個狀態,說明我們需要一個控件來表示狀態;圖層的名字也需要顯示,我們需要一個Text View,簡單的我們就放這些,來看下代碼:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="45dp"
android:layout_gravity="center_vertical"
android:orientation="horizontal"
android:background="@color/colorWhite">
android:id="@+id/visibleCheck"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center_vertical"
android:padding="5dp"
app:srcCompat="@drawable/ic_check_box_unchecked" />
android:id="@+id/layerText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="1234556678909"
/>
好了,界面設計好了,那么我們將數據綁定到界面上:
var layers = mapView.layers
LyrCheckItem.ITEMS.clear()
for (i in layers.indices) {
var lyr = layers[layers.size - 1 - i]
var layername = lyr.name //圖層名字逆放
var icon: Int
if (lyr.isVisible) {
icon = R.drawable.ic_check_box_checked
} else {
icon = R.drawable.ic_check_box_unchecked
}
val dummyItem = LyrCheckItem.DummyItem(i.toString() + "", layername, lyr.isVisible, icon)
LyrCheckItem.addItem(dummyItem)
}
var contentView = LayoutInflater.from(this@LandSurveryActivity).inflate(R.layout.ovmaplyr, null)
var lyrList = contentView.findViewById(R.id.overmaplyrmanage) as RecyclerView
lyrList.layoutManager = LinearLayoutManager(mContex)
lyrList.adapter = OverLayerManagerAdapter(LyrCheckItem.ITEMS, mapView)
//使用popwindow顯示
var popWindow = PopupWindow()
popWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT)
popWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT)
popWindow.contentView = contentView
popWindow.update()
popWindow.setFocusable(true)
var dw = ColorDrawable(Color.WHITE)
popWindow.setBackgroundDrawable(dw)
popWindow.showAsDropDown(btnOvLryMg)
OverLayerManagerAdapter :
/**
* Created by Singfee on 2018/2/3.
*/
class OverLayerManagerAdapter(lyrList: ArrayList, mapView: MapView) : RecyclerView.Adapter() {
private var layerList: ArrayList
private var mapView: MapView
init {
layerList = lyrList
this.mapView = mapView
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
holder?.mItem=layerList[position]
holder?.tv_lyrName?.text = layerList[position].layerName
if(layerList[position].status)
holder?.image_check?.setImageResource(R.drawable.ic_check_box_checked)
else
holder?.image_check?.setImageResource(R.drawable.ic_check_box_unchecked)
holder?.view?.tag=position
holder?.itemView?.setOnClickListener { v: View? ->
val lyrs = mapView.layers
for (lyr in lyrs) {
if (lyr.name.equals(holder?.mItem?.layerName)) {
lyr.isVisible = !lyr.isVisible
holder.mItem?.status =lyr.isVisible
if (lyr.isVisible) {
holder.image_check.setImageResource(R.drawable.ic_check_box_checked)
} else {
holder.image_check.setImageResource(R.drawable.ic_check_box_unchecked)
}
}
}
}
}
override fun getItemCount(): Int {
return layerList.size
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
return OverLayerManagerAdapter.ViewHolder(LayoutInflater.from(parent?.context).inflate(R.layout.lyr_manager_item, parent, false))
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val image_check: ImageView =itemView.findViewById(R.id.visibleCheck)
val tv_lyrName: TextView =itemView.findViewById(R.id.layerText)
val view:View=itemView
var mItem: LyrCheckItem.DummyItem? = null
}
}
在界面上,打開圖層管理的時候,我們不能將地圖界面關閉,要實現這種有幾個方式可選,使用PopupWindow,主界面相對布局中使用fragment,以及使用fragmentDialog。我這里實現的是使用的PopupWindow。
在系統中我只是簡單的控制了圖層的顯示和隱藏,如果你有興趣,可以對圖層進行拖動排序、透明度設置等。
總結
實現圖層控制的步驟有一下幾個:
1.設計圖層控制的界面布局
2.實現列表控件的適配器
3.綁定數據到列表控件上
在綁定的時候一定要注意解決當圖層比較多的時候,用戶滑動列表后,刷新狀態導致的顯示不正確問題。
總結
以上是生活随笔為你收集整理的android平台 arcgisr_ArcGIS Runtime For Android 开发 (7)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海欢乐谷青少年票是多少岁到多少岁呢
- 下一篇: 面馆加盟多少钱啊?