超圖使用一段時間了, 所寫皆是個人所感,所學,歡迎指點
最近因為項目上的一些規(guī)劃改動,開始接觸到了超圖,首先我申明,自己真的是一個小白,才開始使用
但是,使用過程中發(fā)現(xiàn)超圖相關(guān)資源的查詢很少,很多時候沒辦法只能去官網(wǎng)提問,那個速度又太慢了,
言歸正傳,今天寫一個關(guān)于超圖中添加點和給點實現(xiàn)一些基礎(chǔ)功能
能看到這里的人,超圖的基本引入這些我就不贅述了,
直接進入正題:
1: 如何在超圖上添加點,
核心代碼:
CallOut callOutView = getCallOutView(dto);
mapview2.addCallout(callOutView);
getCallOutView()方法源碼,說明一下,因為我要給我的這個添加點動態(tài)設(shè)置對應(yīng)的圖標和點擊事件,所以我才把我添加點的這個實體對象直接傳過去,你可以選擇只傳遞坐標過去
方法源碼:
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? 單獨處理? 這里是我按照資源的命名,取對應(yīng)名字的資源文件, 你可以直接使用 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);
? ? ? ? ? ? //設(shè)置動畫
? ? ? ? ? ? selectCallout(callOut);
? ? ? ? });
? ? }
binding.textAddr.setOnClickListener(view -> {
Object object = view.getTag();
? ? ? ? if (objectinstanceof DzdBean) {
? ? ? ? ? ? DzdBean dzdBean = (DzdBean) object;
? ? ? ? ? ? Long indexId = dzdBean.getId();
? ? ? ? ? ? //跳轉(zhuǎn)到我具體詳情界面,不做更深的展示.
? ? ? ? ? ? goToDetailsById(indexId, dzdBean.getDzmc(), dzdBean.getDzlxid(), dzdBean.getDzlxmc());
? ? ? ? }?
});
? ? return callOut;
}
選中和設(shè)置動畫,我就是想給點擊的點有一個比較不一樣的效果,不僅僅單純的就展示一個彈出,源碼如下
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);
}
就那么簡單,總結(jié)一下就是給superMap 添加一個callout的組件? 這里可以自定義樣式,并且在自定義的樣式完成自己想要的一些功能.沒那么多廢話,都是直接上的干貨.下一篇準備寫添加線
對了 還是貼幾張效果圖:
展示效果:
點擊的選中效果(很明顯我這個動畫比較粗糙)