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.绑定数据到列表控件上

在绑定的时候一定要注意解决当图层比较多的时候,用户滑动列表后,刷新状态导致的显示不正确问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值