Arcgis for android runtime100 ——图例

前言

图例由于官方文档写的很模糊,我是请假了师父的情况下,在他的指导下,看官方的iOS图例方法做的。

正文
 public void getmLegendBeans(OnLegendShowListener onLegendShowListener) {
        mLegendBeans.clear();//清除一次列表,保证不会让数据叠加
        List<LayerWorkBean> layers = getSelectedLayerList();//获取到加载的图层

        if (layers == null || layers.isEmpty()) {
            ToastUtil.makeText("当前未加载图层");
            return;
        }

        LayerWorkBean layerBean = layers.get(layers.size() - 1);//只取最上面那层的图例
        List<Layer> lLayer = layerBean.getLayers();
        if (lLayer == null || lLayer.isEmpty()) {
            ToastUtil.makeText("获取图例失败");
            return;
        }
        Layer layer = lLayer.get(lLayer.size() - 1);
        getLegends(layer, onLegendShowListener);
    }

private void getLegends(LayerContent layer, OnLegendShowListener onLegendShowListener) {
        ListenableList<LayerContent> subLayers = layer.getSubLayerContents();

        if (subLayers != null && !subLayers.isEmpty()) {//如果不为空,说明有内层,所以要取内层,递归
            XLog.e("subLayers=" + subLayers);
            LayerContent lc = subLayers.get(0);
            lc.setCanShowInLegend(true);
            getLegends(lc, onLegendShowListener);
        } else {
        //没有内层了,就可以取图例的名称和图标
            ListenableFuture<List<LegendInfo>> results = layer.fetchLegendInfosAsync();
            results.addDoneListener(() -> new Thread(() -> {
                try {
                    List<LegendInfo> tResult = results.get();
                    for (int i = 0; i < tResult.size(); i++) {
                        String tName = tResult.get(i).getName();
                        Symbol tSymbol = tResult.get(i).getSymbol();
                        XLog.e("tResult.getname=" + tName);
                        ListenableFuture<Bitmap> tListFuture
                                = tSymbol.createSwatchAsync(
                                BaseApplication.bsnContext.get(),
                                ContextCompat.getColor(BaseApplication.bsnContext.get(), R.color.sj_bg_90_ffffff)
                        );

                        Bitmap bitmap = null;
                        try {
                            bitmap = tListFuture.get();//把Symbol转换成bitmap
                        } catch (ExecutionException | InterruptedException e) {
                            e.printStackTrace();
                        }
                        legendBean = new LegendBean(tName, bitmap);//创建对象
                        mLegendBeans.add(legendBean);//把对象加到数组去

                    }

                    if (onLegendShowListener != null) {
                        onLegendShowListener.legendShow(mLegendBeans);//由于上面的过程是在线程中做的,是一个异步的过程,所以这边写了个接口,用于完成之后回调,把数组传出去
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    if (onLegendShowListener != null) {
                        onLegendShowListener.legenfError();
                    }
                }
            }).start());

        }

    }

//这边是点击事件
  mCatalogManager.getmLegendBeans(new OnLegendShowListener() {

                    @Override
                    public void legendShow(List<LegendBean> legends) {
                        XLog.e("mlegendBeans=" + legends);
                        if (legends.isEmpty()) {
                            return;
                        }

                        runOnUiThread(() -> {
                            
                            mLegendListAdapter.replaceData(legends);//把获取到的数据放到adapter里
                        });
                    }

                    @Override
                    public void legenfError() {
                        runOnUiThread(() -> ToastUtil.makeText("图例获取失败"));
                    }
                });

图例我感觉靠我个人完成是很有难度的,所以很大部分都是请教了师父,师父也帮我看文档,帮我找问题,很幸运实习能碰到这么平易近人的师父,哈哈,以后继续努力。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值