Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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:如何在MapView上捕捉平移的结束_Android - Fatal编程技术网

Android:如何在MapView上捕捉平移的结束

Android:如何在MapView上捕捉平移的结束,android,Android,您能告诉我如何捕捉MapView平移的结尾吗?一开始,我想我可以使用MotionEvent.ACTION\u。但是,当我的触摸快速移动时,平移动画仍在进行中,而动作启动事件之前已启动。我还必须想出解决此问题的方法。android SDK中似乎没有处理此事件的方法。我所做的是创建一个每200ms运行一次的计时器,并检查地图视图的中心点是否已更改。如果有,则设置a标志。当中心点不再改变时,timer方法知道平移何时停止oldMapCenter==newMapCenter。这可能不是最好的解决方案,但

您能告诉我如何捕捉MapView平移的结尾吗?一开始,我想我可以使用MotionEvent.ACTION\u。但是,当我的触摸快速移动时,平移动画仍在进行中,而动作启动事件之前已启动。

我还必须想出解决此问题的方法。android SDK中似乎没有处理此事件的方法。我所做的是创建一个每200ms运行一次的计时器,并检查地图视图的中心点是否已更改。如果有,则设置a标志。当中心点不再改变时,timer方法知道平移何时停止oldMapCenter==newMapCenter。这可能不是最好的解决方案,但对我来说很有效。在MapActivity中插入以下代码

注意:这将不会在用户进行平移时更新视图,仅在平移后更新

    GeoPoint newMapCenter,oldMapCenter;
    int newZoomLevel=0,oldZoomLevel=0;
    Boolean isMoving=false;
    @Override
    public void onResume() {
        super.onResume();

         autoUpdate = new Timer();
          autoUpdate.schedule(new TimerTask() {
           @Override
           public void run() {
            ((Activity) getActivity()).runOnUiThread(new Runnable() {
             public void run() {

                 if(oldMapCenter==null){
                     oldMapCenter=mapView.getMapCenter();
                 }else{
                 newMapCenter=mapView.getMapCenter();
                 if(!geoPointsAreSame(newMapCenter,oldMapCenter)&&    (!isMoving)){
                     isMoving=true;
                 }else{
                     if(geoPointsAreSame(newMapCenter,oldMapCenter)&&(isMoving)){
                          //Insert update overlay code here
                         isMoving=false;
                     }
                 }
                 oldMapCenter=newMapCenter;
                 }
                 newZoomLevel=mapView.getZoomLevel();

                 if(oldZoomLevel==0){
                     oldZoomLevel=mapView.getZoomLevel();
                 }else{
                     if(oldZoomLevel!=newZoomLevel){
                            //insert update overlay code here

                 }
             }
             oldZoomLevel=mapView.getZoomLevel();


         }
             }


            private boolean geoPointsAreSame(GeoPoint newMapCenter,
                    GeoPoint oldMapCenter) {
                if(newMapCenter.getLatitudeE6()==oldMapCenter.getLatitudeE6()){
                    if(newMapCenter.getLongitudeE6()==oldMapCenter.getLongitudeE6()){
                        return true;
                    }
                }
                return false;
                }

            });
           }
          }, 3000, 200); // updates each 200 millisecs`-

我也必须想出解决这个问题的办法。android SDK中似乎没有处理此事件的方法。我所做的是创建一个每200ms运行一次的计时器,并检查地图视图的中心点是否已更改。如果有,则设置a标志。当中心点不再改变时,timer方法知道平移何时停止oldMapCenter==newMapCenter。这可能不是最好的解决方案,但对我来说很有效。在MapActivity中插入以下代码

注意:这将不会在用户进行平移时更新视图,仅在平移后更新

    GeoPoint newMapCenter,oldMapCenter;
    int newZoomLevel=0,oldZoomLevel=0;
    Boolean isMoving=false;
    @Override
    public void onResume() {
        super.onResume();

         autoUpdate = new Timer();
          autoUpdate.schedule(new TimerTask() {
           @Override
           public void run() {
            ((Activity) getActivity()).runOnUiThread(new Runnable() {
             public void run() {

                 if(oldMapCenter==null){
                     oldMapCenter=mapView.getMapCenter();
                 }else{
                 newMapCenter=mapView.getMapCenter();
                 if(!geoPointsAreSame(newMapCenter,oldMapCenter)&&    (!isMoving)){
                     isMoving=true;
                 }else{
                     if(geoPointsAreSame(newMapCenter,oldMapCenter)&&(isMoving)){
                          //Insert update overlay code here
                         isMoving=false;
                     }
                 }
                 oldMapCenter=newMapCenter;
                 }
                 newZoomLevel=mapView.getZoomLevel();

                 if(oldZoomLevel==0){
                     oldZoomLevel=mapView.getZoomLevel();
                 }else{
                     if(oldZoomLevel!=newZoomLevel){
                            //insert update overlay code here

                 }
             }
             oldZoomLevel=mapView.getZoomLevel();


         }
             }


            private boolean geoPointsAreSame(GeoPoint newMapCenter,
                    GeoPoint oldMapCenter) {
                if(newMapCenter.getLatitudeE6()==oldMapCenter.getLatitudeE6()){
                    if(newMapCenter.getLongitudeE6()==oldMapCenter.getLongitudeE6()){
                        return true;
                    }
                }
                return false;
                }

            });
           }
          }, 3000, 200); // updates each 200 millisecs`-

是否要处理缩放事件请确认?不,我没有。我想知道平移什么时候完成。你能详细说明一下吗,因为我不知道确切的问题是什么。你知道怎么做吗,因为我被完全相同的事情困住了。我想知道地图视图最后停在哪里,这样我就可以得到坐标了!是否要处理缩放事件请确认?不,我没有。我想知道平移什么时候完成。你能详细说明一下吗,因为我不知道确切的问题是什么。你知道怎么做吗,因为我被完全相同的事情困住了。我想知道地图视图最后停在哪里,这样我就可以得到坐标了!