在我的Android应用程序中,我有一个自定义视图,其功能类似于 Map . 当用户触摸特定位置时,我希望能够在某种信息泡泡中显示更多信息 . 这与谷歌 Map api的工作方式非常相似,但我不想使用他们的api .
到目前为止,我已经尝试将圆角矩形直接绘制到画布上,并在指定位置的顶部绘制文本 . 但这有很多缺点:
1)我不知道如何计算矩形相对于文本的长度和大小应该有多大 .
2)绘制一个矩形不会留下视图的强大空间(内置onTouch事件,并且可以轻松自定义视图)
我也尝试使用视图(按钮)来显示信息,但没有成功 . 据我所知,我无法指定视图应显示的位置(因为信息气泡需要根据 Map 滚动的位置移动) .
总之,我需要两种方法中的最佳方法,其中图像应根据显示的文本量轻松调整大小,并且信息气泡应该能够根据滚动的位置在屏幕上移动 .
有没有人对如何在不使用谷歌 Map API的情况下创建这样的信息泡泡的最佳方法有任何建议?
2 回答
我绝不是100%确定我提出的方法是正确的方法,但这就是我如何处理这个问题:
在计算文本大小之前,首先需要计算文本的大小,为此,请使用以下方法,前提是您已创建了用于绘制文本的Paint对象 .
在绘制 Map 和信息泡沫方面,我就是这样做的:
您的整个 Map 图像将成为您的基本框,视图中的部分将成为您的视图框 . 因此,如果用户平移并放大 Map ,基本上发生的情况是您使用我们的视图框仅显示 Map 的一部分 . 根据视图框计算绘制气泡的位置非常棘手,但如果相对于基本框进行绘制,则变得非常容易 . 基本上,您将绘制整个 Map ,包括气泡,并将其裁剪为仅在视图中的部分 .
这纯粹是我如何去做,但我认为实施起来并不是很难 . 您需要做的就是跟踪您的视图框从基本框的左上角偏移了多少,并且您可以非常轻松地获取与需要种植气泡的基本框相关的位置 .
如果我没有很好地解释这一点,请告诉我 .
最好,
Ignus
一种方法是通过扩展布局来创建气球 - 例如LinearLayout并覆盖dispathDraw()以实际绘制气球 . 然后,您可以从布局xml配置和使用Ballon,并为内容添加textView . 例如:
从您的活动中,您可以加载弹出窗口:
然后更改活动中的文本:
您还可以将ClickViews或其他任何内容添加到气球中以获取clickListeners等...