美文网首页
超图 android 开发添加点(自定义点样式和部分功能)

超图 android 开发添加点(自定义点样式和部分功能)

作者: 渺渺兮予怀_ | 来源:发表于2023-08-03 10:17 被阅读0次

    超图使用一段时间了, 所写皆是个人所感,所学,欢迎指点

    最近因为项目上的一些规划改动,开始接触到了超图,首先我申明,自己真的是一个小白,才开始使用

    但是,使用过程中发现超图相关资源的查询很少,很多时候没办法只能去官网提问,那个速度又太慢了,

    言归正传,今天写一个关于超图中添加点和给点实现一些基础功能

    能看到这里的人,超图的基本引入这些我就不赘述了,

    直接进入正题:

    1: 如何在超图上添加点,

    核心代码:

    CallOut callOutView = getCallOutView(dto);

    mapview2.addCallout(callOutView);

    getCallOutView()方法源码,说明一下,因为我要给我的这个添加点动态设置对应的图标和点击事件,所以我才把我添加点的这个实体对象直接传过去,你可以选择只传递坐标过去

    方法源码:

    public CallOutgetCallOutView(DzdBean featureBean) {

    //这里是自定义的显示 我就一个名字和一个图标,稍后会贴图显示

    CalloutBinding binding = CalloutBinding.inflate(LayoutInflater.from(context));

        CallOut callOut =new CallOut(context);

        callOut.setContentView(binding.getRoot());

        callOut.setCustomize(true);

        callOut.setLocation(featureBean.getX(), featureBean.getY());

        String dzlxmc = featureBean.getDzlxmc();

        if (dzlxmc !=null) {

    String spells = ChineseCharacterHelper.getSpells(dzlxmc);

            // 获取图标资源的ID  有一个叫xxxx  单独处理  这里是我按照资源的命名,取对应名字的资源文件, 你可以直接使用 R.mipmap.xxx

            int iconResourceId = getResources().getIdentifier(spells.toLowerCase().equals("bhkj") ?

    "bh" : spells.toLowerCase(), "mipmap", context.getPackageName());

            binding.btnSelected.setImageResource(iconResourceId);

            binding.textAddr.setTag(featureBean);

            callOut.setTag(R.id.text_addr, "" + featureBean.getDzmc());

            binding.btnSelected.setTag(featureBean);

            binding.btnSelected.setTag(R.id.text_addr, "" + featureBean.getDzmc());

            callOut.setOnClickListener(view -> {

    if (textAddrShowed !=null) {

    textAddrShowed.setVisibility(GONE);

                    List callouts =mapview2.getCallouts();

                    for (CallOut callout1 : callouts) {

    callout1.setSelected(false);

                        callout1.clearAnimation();

                    }

    }

    //显示当前标题

                textAddrShowed =binding.textAddr;

                textAddrShowed.setVisibility(VISIBLE);

                textAddrShowed.setText(view.getTag(R.id.text_addr).toString());

            });

            binding.btnSelected.setOnClickListener(view -> {

    Object tag = view.getTag();

                if (taginstanceof DzdBean) {

    DzdBean featureBean1 = (DzdBean) tag;

                    Point2D point2D =new Point2D(featureBean1.getX(), featureBean1.getY());

                    mapControl.panTo(point2D, 200);

                }

    if (textAddrShowed !=null) {

    textAddrShowed.setVisibility(GONE);

                }

    //显示当前标题

                textAddrShowed =binding.textAddr;

                textAddrShowed.setVisibility(VISIBLE);

                textAddrShowed.setText(view.getTag(R.id.text_addr).toString());

                selectCallout(callOut);

                //设置动画

                selectCallout(callOut);

            });

        }

    binding.textAddr.setOnClickListener(view -> {

    Object object = view.getTag();

            if (objectinstanceof DzdBean) {

                DzdBean dzdBean = (DzdBean) object;

                Long indexId = dzdBean.getId();

                //跳转到我具体详情界面,不做更深的展示.

                goToDetailsById(indexId, dzdBean.getDzmc(), dzdBean.getDzlxid(), dzdBean.getDzlxmc());

            } 

    });

        return callOut;

    }

    选中和设置动画,我就是想给点击的点有一个比较不一样的效果,不仅仅单纯的就展示一个弹出,源码如下

    public void selectCallout(CallOut callOut) {

    List callouts =mapview2.getCallouts();

        for (CallOut callout1 : callouts) {

    callout1.setSelected(false);

            callout1.clearAnimation();

        }

    callOut.setSelected(true);

        setAnimation(callOut);

    }

    private void setAnimation(CallOut marker) {

    // 定义组合动画 -- 我这里就是一个单纯的闪烁动画,你可以按照你的想法自定义动画

        android.view.animation.ScaleAnimation scaleAnimation =new android.view.animation.ScaleAnimation(1.0f, 1.0f, 0.9f, 1.0f);

        scaleAnimation.setDuration(1000);

        scaleAnimation.setRepeatCount(100000);

        marker.setAnimation(scaleAnimation);

    }

    就那么简单,总结一下就是给superMap 添加一个callout的组件  这里可以自定义样式,并且在自定义的样式完成自己想要的一些功能.没那么多废话,都是直接上的干货.下一篇准备写添加线

    对了 还是贴几张效果图:

    展示效果:

    点击的选中效果(很明显我这个动画比较粗糙)

    相关文章

      网友评论

          本文标题:超图 android 开发添加点(自定义点样式和部分功能)

          本文链接:https://www.haomeiwen.com/subject/kjcdnrtx.html