如何在地图上创建信息泡泡(不是谷歌API)

时间:2011-01-26 02:35:39

标签: java android maps

在我的Android应用程序中,我有一个自定义视图,其功能类似于地图。当用户触摸特定位置时,我希望能够在某种信息泡泡中显示更多信息。这与谷歌地图api的工作方式非常相似,但我不想使用他们的api。

到目前为止,我已尝试将圆角矩形直接绘制到画布上,并在指定位置的顶部绘制文本。但这有很多缺点:

1)我不知道如何计算矩形相对于文本长度和大小的大小。

2)绘制一个矩形不会留下任何视野的空间(内置onTouch事件,并且可以轻松自定义视图)

我也尝试使用视图(按钮)来显示信息,但没有成功。据我所知,我无法指定视图应显示的位置(因为信息气泡需要根据地图的滚动位置移动)。

总之,我需要两种方法中的最佳方法,其中图像应根据显示的文本量轻松调整大小,并且信息气泡应该能够根据滚动的位置在屏幕上移动。

有没有人建议在不使用谷歌地图API的情况下创建这样的信息泡泡的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

一种方法是通过扩展布局来创建气球 - 例如LinearLayout并覆盖dispathDraw()以实际绘制气球。然后,您可以从布局xml配置和使用Ballon,并为内容添加textView。例如:

<mycustom.PopUpBalloon
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/transparent_panel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5px">
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="default"
            android:textColor="#ffffffff"
            android:textStyle="bold"
            />

    </RelativeLayout>
</mycustom.PopUpBalloon>

然后,您可以在活动中加载弹出窗口:

mPopUp = (PopUpBalloon) layoutInflater.inflate(R.layout.popup, null);

然后更改活动中的文字:

 // Remove any previous Popups from the holding View  
 mView.removeView(mPopUp);
 mPopUp.setVisibility(View.VISIBLE);
 ((TextView) mPopUp.findViewById(R.id.title)).setText("Hello World");

你也可以为气球添加ImageViews或其他任何东西以获得clickListeners等......

答案 1 :(得分:0)

我绝不是100%确定我提出的方法是正确的方法,但这就是我如何处理这个问题:

在计算文本大小之前,首先需要计算文本的大小,为此,请使用以下方法,前提是您已经创建了一个用于绘制的Paint对象文本。

//This will give you the width of the text
textPaint.measureText("Text to render")

//This will give you the height of the text
textPaint.getFontSpacing()

在绘制地图和信息泡沫方面,我就是这样做的:

您的整个地图图片将成为您的基本框,视图中的部分将成为您的视图框。因此,如果用户平移并放大地图,基本上发生的情况是您使用我们的视图框仅显示地图的一部分。根据视图框计算绘制气泡的位置非常棘手,但如果相对于基本框进行绘制,则变得非常容易。基本上,您将绘制整个地图,包括气泡,并将其裁剪为仅在视图中的部分。

这纯粹是我如何去做,但我认为实施起来并不是很难。您需要做的就是跟踪视图框从基本框的左上角偏移了多少,并且您可以非常轻松地获取与基本框相关的位置需要种植的气泡。

如果我没有很好地解释这一点,请告诉我。

最佳,

Ignus