Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双击/点击地图缩放(Android)_Android_Google Maps - Fatal编程技术网

双击/点击地图缩放(Android)

双击/点击地图缩放(Android),android,google-maps,Android,Google Maps,可能重复: 我有一个活动,它扩展了映射活动。我使用谷歌地图。 我需要双击或双击放大 有人能帮我吗 我已经看了下面的内容,但它们不是我想要的 我意识到,onTouchListener只被调用一次,为什么会这样 // set Gesture detector = new GestureDetector(new GestureReactor()); mapView.setOnTouchListener(new OnTouchListener() { @Override publi

可能重复:

我有一个
活动
,它扩展了
映射活动
。我使用谷歌地图。
我需要双击或双击放大

有人能帮我吗

我已经看了下面的内容,但它们不是我想要的

我意识到,
onTouchListener
只被调用一次,为什么会这样

// set Gesture
detector = new GestureDetector(new GestureReactor());
mapView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        System.out.println("Inside onTouch");
        return detector.onTouchEvent(event);
    }
});
我有私人课:

private class GestureReactor extends SimpleOnGestureListener {
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        System.out.println("inside onDouble");
        controller.zoomInFixing((int) e.getX(), (int) e.getY());
        return super.onDoubleTap(e);
    }
}


既然你想复制粘贴答案,看

编辑:

在我的
public类MainMap extends MapActivity
中,我有一个名为
private MyMapView mv的字段

然后我创建了一个类,它扩展了
MapView
,如下所示:
公共类MyMapView扩展了MapView


因此,您只需创建一个新类,
扩展MapView
,复制粘贴您在其中的链接中找到的代码,并在扩展MapActivity的活动中使用新的
此解决方案非常好

我喜欢使用自定义视图扩展MapView并在整个应用程序中使用此解决方案。MapView有一个截取触摸手势的功能,您可以使用该功能进行双击巫毒。如果应用程序中有多个地图,这是保持干燥的好方法

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;

import com.google.android.maps.MapView;

public class MyMapView extends MapView {
    private long lastTouchTime = -1;

    public MyMapView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            long thisTime = System.currentTimeMillis();
            if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) {
                // Double tap
                this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
                lastTouchTime = -1;
            } else {
                // Too slow :)
                lastTouchTime = thisTime;
            }
        }

        return super.onInterceptTouchEvent(ev);
    }
}
导入android.content.Context;
导入android.util.AttributeSet;
导入android.view.MotionEvent;
导入android.view.ViewConfiguration;
导入com.google.android.maps.MapView;
公共类MyMapView扩展了MapView{
私有长lastTouchTime=-1;
公共MyMapView(上下文、属性集属性){
超级(上下文,attrs);
}
@凌驾
公共布尔值onInterceptTouchEvent(MotionEvent ev){
if(ev.getAction()==MotionEvent.ACTION\u向下){
long ThistTime=System.currentTimeMillis();
if(ThistTime-lastTouchTime

开始,我无法像其他许多人那样去工作,因为这不允许我投射
mapView=(MyMapView)findViewById(R.id.mapView)据说我得到的最佳解决方案基于以下答案:

myLocationOverlay=新建myLocationOverlay(此,地图视图);
MyItemizedOverlay itemizedOverlay=新建MyItemizedOverlay(){
private long systemTime=System.currentTimeMillis();
@凌驾
公共布尔onTouchEvent(MotionEvent事件,MapView MapView){
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
if((System.currentTimeMillis()-systemTime)
我遇到了与bbodenmiller相同的问题,在我不得不转换到新制作的类之前,一切都很好。mapView=(MyMapView)findViewById(R.id.mapView);将始终抛出异常

解决方案是更改显示自定义MapView的XML布局。使用普通地图视图时,XML布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="Hidden for obvious reasons"
/>

问题在于“com.google.android.maps.MapView”将视图定义为一个特定的MapView。您需要使用自定义的MapView来定义它。最后看起来更像这样

<?xml version="1.0" encoding="utf-8"?>
<jocquej.PackageName.MyMapView
    ...
/>

我也一直在寻找答案/示例,但没有找到有效的代码

最后,以下是对我有用的代码:

MyMapActivity.java

public class MyMapActivity extends MapActivity implements OnGestureListener,
OnDoubleTapListener{

private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mapView = (MapView)findViewById(R.id.mapView);

}
@Override
public boolean onDoubleTap(MotionEvent e) {
     int x = (int)e.getX(), y = (int)e.getY();;  
     Projection p = mapView.getProjection();  
     mapView.getController().animateTo(p.fromPixels(x, y));
     mapView.getController().zoomIn();  
  return true; 
}
//Here will be some autogenerated methods too
public class OnDoubleTap extends MapView {

  private long lastTouchTime = -1;

  public OnDoubleTap(Context context, AttributeSet attrs) {

    super(context, attrs);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {

    if (ev.getAction() == MotionEvent.ACTION_DOWN) {

      long thisTime = System.currentTimeMillis();
      if (thisTime - lastTouchTime < 250) {

        // Double tap
        this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
        lastTouchTime = -1;

      } else {

        // Too slow 
        lastTouchTime = thisTime;
      }
    }

    return super.onInterceptTouchEvent(ev);
  }
}
OnDoubleTap.java

public class MyMapActivity extends MapActivity implements OnGestureListener,
OnDoubleTapListener{

private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mapView = (MapView)findViewById(R.id.mapView);

}
@Override
public boolean onDoubleTap(MotionEvent e) {
     int x = (int)e.getX(), y = (int)e.getY();;  
     Projection p = mapView.getProjection();  
     mapView.getController().animateTo(p.fromPixels(x, y));
     mapView.getController().zoomIn();  
  return true; 
}
//Here will be some autogenerated methods too
public class OnDoubleTap extends MapView {

  private long lastTouchTime = -1;

  public OnDoubleTap(Context context, AttributeSet attrs) {

    super(context, attrs);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {

    if (ev.getAction() == MotionEvent.ACTION_DOWN) {

      long thisTime = System.currentTimeMillis();
      if (thisTime - lastTouchTime < 250) {

        // Double tap
        this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
        lastTouchTime = -1;

      } else {

        // Too slow 
        lastTouchTime = thisTime;
      }
    }

    return super.onInterceptTouchEvent(ev);
  }
}
公共类OnDoubleTap扩展了MapView{ 私有长lastTouchTime=-1; 公共OnDoubleTap(上下文、属性集属性){ 超级(上下文,attrs); } @凌驾 公共布尔值onInterceptTouchEvent(MotionEvent ev){ if(ev.getAction()==MotionEvent.ACTION\u向下){ long ThistTime=System.currentTimeMillis(); 如果(这次-上次接触时间<250){ //双击 this.getController().zoomInFixing((int)ev.getX(),(int)ev.getY()); lastTouchTime=-1; }否则{ //太慢 lastTouchTime=这次; } } 返回超级onInterceptTouchEvent(ev); } }
main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

        <azizbekyan.andranik.map.OnDoubleTap
            android:id="@+id/mapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:enabled="true"
            android:clickable="true"
            android:apiKey="YOUR_API_KEY" />        
</LinearLayout>


别忘了在这里用你的
apiKey
替换
android:apiKey
值,因为这些链接会满足你的要求。不,它们不会,它们会谈论onFling/*/使用
onDoubleTap
而不是
onFling
对程序员来说应该是一个非常容易的选择,对吧?试试看。是的,你是对的,我忘了我是一名程序员有一段时间了。首先,让我感谢你的帮助,其次,你是如何发现我在寻找复制粘贴代码的。第三,让我告诉你,在3.15小时的搜索和尝试之后,有一个小问题很好。还有其他建议吗?我的类是从MapActivity扩展而来的。@并查看编辑:-)非常感谢。这也很有帮助。断开的链接,朋友。“Posterous空间不再可用”链接断开,朋友。“Posterous空格不再可用”