高德地图根据缩放比例添加和隐藏文字标注

在网上查了很多,都是添加Marker的方法,几乎没有关于添加Text文字标注的,其实跟添加Text文字标注差别不大,下面来看看:

一、简单添加Text

aMap.addText(
					new TextOptions()
						.position(new LatLng(39.13455,112.456891))//位置
						.text("我添加的Text")                    //文字内容
						.backgroundColor(Color.alpha(0))        //背景颜色
						.fontSize(35)                            //字体大小
						.fontColor(Color.parseColor("#878787"))    //文字颜色
				);

二、根据屏幕内Marker的位置添加对应Marker位置的地域名称,根据不同的缩放比例来显示或者移除Text,先说思路:

1.添加AMap.OnCameraChangeListener,这个是在改变地图状态的时候调用的,每一次拖动或者缩放地图的时候都会调用。

2.定义一个List<Text>集合来盛放屏幕内所有的Text对象。

3.获取屏幕内所有的Marker对象,在根据Marker的位置标记Text,并将所有的Text放到List集合中返回给第二步的List<Text>。

4.在AMap.OnCameraChangeListener的回调方法中判断地图的缩放比例来设置Text的显示和回收。

代码实现:这里我只放出实现的代码,至于显示地图添加Marker可以参照网上

public class MainMapActivity extends BaseAMapAct implements
		AMap.OnInfoWindowClickListener,
		AMap.OnMapClickListener,
		View.OnClickListener,
		AMap.OnCameraChangeListener{

    private List<Text> screenTextList = null;//当前屏幕的Text 

    @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_map);
        ...
        aMap.setOnCameraChangeListener(this);
        ...
}

...
@Override
	public void onCameraChange(CameraPosition cameraPosition) {

	}

//拖动地图时当缩放比例小于20的时候显示Text大于20就removeText
	@Override
	public void onCameraChangeFinish(CameraPosition cameraPosition) {
            //获取当前屏幕的Marker
		List<Marker> screenMarkers = aMap.getMapScreenMarkers();

		if (aMap.getScalePerPixel() < 10){		//在缩放比例小于10的时候显示Text
			System.out.println( "获取的比例:" + aMap.getScalePerPixel());
			isShowTextPlace = true;
			//删除之前添加的点
			if (screenTextList != null && screenTextList.size() > 0){
				MapUtil.removeScreenText(screenTextList);
				screenTextList.clear();
			}
			screenTextList = MapUtil.getScreenText(aMap,screenMarkers,isShowTextPlace);
		}else {
			//删除之前添加的点
			if (screenTextList != null && screenTextList.size() > 0){
				MapUtil.removeScreenText(screenTextList);
				screenTextList.clear();
			}
		}

	}
}

接下来是实现添加和回收的功能

public class MapUtil {

	//Text获取与添加
	public static List<Text> getScreenText(AMap aMap,List<Marker> screenMarks,boolean isshow){
		List<Text> textList = new ArrayList<>();
		int size = screenMarks.size();
		for (int i = 0;i < size; i++){
			textList.add(addScreenMarkersText(aMap,screenMarks.get(i)));
		}
		return textList;
	}
        //在地图上添加Text
	public static Text addScreenMarkersText(AMap aMap,Marker screenMark){
			return aMap.addText(
					new TextOptions()
						.position(screenMark.getPosition())
						.text(screenMark.getTitle())
						.backgroundColor(Color.alpha(0))
						.fontSize(35)
						.fontColor(Color.parseColor("#878787"))
				);

	}
	//Text的回收
	public static void removeScreenText(List<Text> screenTestList){
		int size = screenTestList.size();
		for (int i = 0; i < size; i++){
			screenTestList.get(i).remove();
		}
	}
}

好了,就这样简单,希望能帮到大家,互相学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值