要想使用自定义的Callout,首先需要几个步骤:
1、定义Callout的样式
根据官方给的介绍,这里我们选择在res目录下新建一个xml目录,在目录里新建一个名为callout_style.xml的配置文件,用于配置callout的样式。代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<calloutViewStyle>
titleTextColor="#000000" <!-- 标题颜色 -->
titleTextSize = 10; <!-- 标题文字大小 -->
titleTextStyle = 0; <!-- 字体样式 -->
titleTextTypeFace = 0; <!-- 字体类型设置 -->
backgroundColor="#ffffff" <!-- Callout背景颜色 -->
backgroundAlpha="255" <!-- Callout透明度 -->
frameColor="#000000" <!-- 边框颜色 -->
flat="true" <!-- true表示2D图形,false表示3D图形 -->
style.getCornerCurve()="0" <!-- 边框的角的圆润程度 -->
anchor="5" <!-- 锚点的位置-->
</calloutViewStyle>
</resources>
2、自定义Callout的布局
我们在res/layout目录下新建一个callout_layout.xml的配置文件,用来布置Callout的界面布局。代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="150dp"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="12sp"/>
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="12sp"/>
</LinearLayout>
</LinearLayout>
3、在代码中使用Callout
定义好了配置文件,接下来就是在代码中使用这个Callout了,需要注意的是,一个MapView只能同时显示一个Callout,并且,这个Callout只能从MapView中获取。Java代码如下:
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.callout_layout, null);
// 设置Callout属性
TextView title = (TextView)view.findViewById(R.id.title);
TextView content = (TextView)view.findViewById(R.id.content);
title.setText("这是Callout的标题");
content.setText("这是Callout的内容");
// 设置Callout锚点(MapView上的一个地图位置点)
Point test = new Point(map.toMapPoint(new Point(e.getX(),e.getY())).getX(),map.toMapPoint(new Point(e.getX(),e.getY())).getY());
// 获取Callout
Callout callout = map.getCallout();
// 设置Callout样式
callout.setStyle(R.xml.callout_style);
// 设置锚点偏移量
callout.setOffset(0, -5);
// 显示Callout
callout.show(test, view);
title.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "你点了插图上的标题!但是并没什么动静。");
}
});