我的应用程序中有一个mapview,一切都在使用touchEvents。
然而,为了最大限度地提高App的用户,我一直在尝试添加trackBall界面功能,并遇到了问题。
当轨迹球处于焦点时,它会正确地滚动mapView,但是当用户以覆盖项为中心时,我无法触发onTap事件。
当我单击鼠标按钮(我正在使用模拟器)来模拟轨迹球用户点击(F6接合轨迹球)时没有任何反应.. onTrackBallEvent代码在这种情况下永远不会被触发,我希望给定API docs说在这个实例中应该触发onTap,但它也不会被触发。
如果我不在overlayItem的中心,我会在onTrackBallEvent中获得ACTION_DOWN和ACTION_UP事件,只有当地图以OverlayItem为中心时才会触发onTrackBallEvent。不幸的是,onTap Events也没有被解雇。当叠加层位于屏幕中心并且用户点击轨迹球时,操作系统显然正在利用这些点击做一些事情,但如果我能弄清楚它是什么,我会很沮丧。
有谁知道我应该寻找什么事件?
答案 0 :(得分:1)
这是一个相当古老的问题,但我认为我会给出2美分。出于某种原因,您需要在地图上的某处添加叠加层,然后onTap()覆盖可以添加您单击的其他叠加层。我用过:
public boolean onTap(GeoPoint p, MapView mapView) {
boolean tappedAnOverlay = super.onTap(p, mapView);
if (tappedAnOverlay) {
// do your thing if hit an overlay
}
else {
// no overlay found in that location
}
MapController mc = mapView.getController();
mc.animateTo(p);
return true;
}
答案 1 :(得分:0)
因为它适用于此。我检查屏幕上的生命点是否与某个叠加项匹配。
public boolean onTouchEvent(MotionEvent event, MapView mv) {
final int action=event.getAction();
final int x=(int)event.getX();
final int y=(int)event.getY();
if(!this.marker.equals(getResources().getDrawable(R.drawable.parada))){
if (action == MotionEvent.ACTION_DOWN) {
for (OverlayItem item : mItems) {
Point p = new Point(0,0);
mv.getProjection().toPixels(item.getPoint(), p);
if (hitTest(item, marker, x-p.x, y-p.y) && item.getSnippet()!= "parada") {
答案 2 :(得分:0)
请尝试这个。这用于在地图视图上显示多个叠加层,可能会解决问题:https://github.com/donnfelker/android-mapviewballoons