Android获取Mapview on Fling停止了动画效果

时间:2011-05-10 13:02:26

标签: android google-maps android-mapview

我需要限制用户可以在mapview中导航到的区域(除非他们会得到一个空白的屏幕!)。 我创建了一个扩展mapview并覆盖onTouchEvent的类。 我正在检测动作“ACTION_UP”并检查此处的坐标,并在必要时重新放置地图。一切正常,直到用户“甩”地图。我可以在该点检测到“向上”和屏幕坐标,但地图仍在移动,因此我检测到的坐标不正确。

我需要知道停止移动时的屏幕位置!

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_UP ) {
//get coords of screen corners and calculate if the map is still in view.
}

我一直在寻找相当多的时间来回答这个问题,但很多人都在问这个问题,但似乎没有任何解决方案?

有人设法做到了吗?

Bex

2 个答案:

答案 0 :(得分:0)

我用来覆盖MapView的computeScroll()方法:

/**
 * checks restriction on pan bounds and locks the map. if the map is locked
 * (via mapController.getCenter()) this method returns true
 * 
 * @return TRUE if map has been locked
 */
private boolean restrictPanOnBounds() {
  if (this.minLatitudeE6 == Integer.MIN_VALUE)
    return false;

  GeoPoint center = getMapCenter();
  int cLat = center.getLatitudeE6();
  int cLong = center.getLongitudeE6();

  Integer nLat = null, nLong = null;

  if (cLat < this.minLatitudeE6)
    nLat = this.minLatitudeE6;
  else if (cLat > this.maxLatitudeE6)
    nLat = this.maxLatitudeE6;

  if (cLong < this.minLongitudeE6)
    nLong = this.minLongitudeE6;
  else if (cLong > this.maxLongitudeE6)
    nLong = this.maxLongitudeE6;

  if (nLat != null || nLong != null) {
    getController().setCenter(new GeoPoint(nLat != null ? nLat : cLat, nLong != null ? nLong : cLong));
    return true;
  } else {
    return false;
  }
}

@Override
public void computeScroll() {
  if (restrictPanOnBounds())
    getController().stopPanning();
  else
    super.computeScroll();
}

它适用于简单的移动动作(地图停止不会跳回)但在投掷时仍然具有“有趣”的倾斜效果......

答案 1 :(得分:0)

我遇到了同样的问题。你的方法很好,只需要在另一个地方捕捉事件。你可以覆盖&#34; DispatchTouchEvent&#34; MapView类的方法(或者使用类似的方法使用MapFragment),然后让它跳过MotionEvent.ACTION_UP事件:

if (ev.getAction() == MotionEvent.ACTION_UP ) {
   return false;
}