超图使用一段时间了, 所写皆是个人所感,所学,欢迎指点
最近因为项目上的一些规划改动,开始接触到了超图,首先我申明,自己真的是一个小白,才开始使用
但是,使用过程中发现超图相关资源的查询很少,很多时候没办法只能去官网提问,那个速度又太慢了,
言归正传,今天写一个关于超图中添加点和给点实现一些基础功能
能看到这里的人,超图的基本引入这些我就不赘述了,
直接进入正题:
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的组件 这里可以自定义样式,并且在自定义的样式完成自己想要的一些功能.没那么多废话,都是直接上的干货.下一篇准备写添加线
对了 还是贴几张效果图:
展示效果:
点击的选中效果(很明显我这个动画比较粗糙)