Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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时,如何使Google make位于中心?_Android_Google Maps - Fatal编程技术网

当使用双击和挤压放大android时,如何使Google make位于中心?

当使用双击和挤压放大android时,如何使Google make位于中心?,android,google-maps,Android,Google Maps,我在搜索谷歌地图中心的同时,使用双击和按压进行缩放。我已经找到了一个解决方案,这是唯一的双击缩放解决方案 TouchableWrapper public class TouchableWrapper extends FrameLayout { GestureDetectorCompat mGestureDetector; public TouchableWrapper(Context context) { super(context); m

我在搜索谷歌地图中心的同时,使用双击和按压进行缩放。我已经找到了一个解决方案,这是唯一的双击缩放解决方案

TouchableWrapper

 public class TouchableWrapper extends FrameLayout {

    GestureDetectorCompat mGestureDetector;


    public TouchableWrapper(Context context) {
        super(context);
        mGestureDetector = new GestureDetectorCompat(context, mGestureListener);
    }


    private final GestureDetector.SimpleOnGestureListener mGestureListener
            = new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.e("GestureDetector", "Executed");
            //Notify the event bus (I am using Otto eventbus of course) that you have just received a double-tap event on the map, inside the event bus event listener
            EventBus_Singleton.getInstance().post(new EventBus_Poster("double_tapped_map"));

            return true;
        }
    };

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        mGestureDetector.onTouchEvent(ev);
        return super.onInterceptTouchEvent(ev);
    }


}
我使用了事件触发器

public class EventBus_Singleton {

    private static final Bus BUS = new Bus();

    public static Bus getInstance() {
        return BUS;
    }

    public EventBus_Singleton() {
    }

    public void post(String s) {
        BUS.post(s);
    }
}
EventBus\u海报

public class EventBus_Poster {
    public final String string;

    EventBus_Poster(String string) {
        this.string = string;
    }
}
在我的地图活动中,我使用事件接收方法缩放同一位置的地图

 @Subscribe
    public void EventBus_singleton(EventBus_Poster event) {
        Log.e("EventBus_singleton", "Executed");
        if (event != null && event.string.equals("double_tapped_map")) {
            if (mapFragment != null) {
                mapFragment.getMap().getUiSettings().setZoomGesturesEnabled(false);
                mapFragment.getMap().getUiSettings().setRotateGesturesEnabled(false);

                mapFragment.getMap().setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
                    @Override
                    public void onCameraChange(CameraPosition cameraPosition) {
                        LatLng lng = cameraPosition.target;
                        Log.e("LatLng", "" + lng);
                    }
                });
                mapFragment.getMap().animateCamera(CameraUpdateFactory.zoomIn(), 400, null);
            }

        }
    }

我曾尝试使用
scalegestruedetector.simpleonscalegestruelistener
进行收缩缩放,但效果不佳,有时甚至出现滞后现象。有人能帮我在谷歌地图上进行收缩缩放吗?

好吧,我发现在尝试这样做的时候,成功的收缩缩放需要速度比例条件。速度是用来衡量你是否真的想缩放的,这取决于你移动两个手指的速度,你可以在谷歌地图和优步的应用程序中尝试,实际上,您可以保持手指彼此远离或靠近,但移动速度太慢,以至于不会触发地图上的放大/缩小事件

所以,当试图确定一个完整的捏手姿势时,肯定会涉及到速度。第二,当然你也需要缩放,我已经打印出了缩放值,当你开始收缩缩小时,它总是小于1.0,当你开始收缩放大时,它总是大于1.0

这两种方法的结合肯定会得到更好的结果,我想先看看速度

private final ScaleGestureDetector.OnScaleGestureListener mScaleGestureListener
        = new ScaleGestureDetector.SimpleOnScaleGestureListener() {
    /**
     * This is the active focal point in terms of the viewport. Could be a local
     * variable but kept here to minimize per-frame allocations.
     */

    float startingSpan;
    float startFocusX;
    float startFocusY;

    @Override
    public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
        startingSpan = scaleGestureDetector.getCurrentSpan();
        startFocusX = scaleGestureDetector.getFocusX();
        startFocusY = scaleGestureDetector.getFocusY();

        return true;
    }

    @Override
    public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
        float scale = scaleGestureDetector.getCurrentSpan() / startingSpan;

        mVelocityTracker.computeCurrentVelocity(1000);

        Log.d("VELOCITY", "X vel : " + mVelocityTracker.getXVelocity());
        Log.d("VELOCITY", "Y vel : " + mVelocityTracker.getYVelocity());

        if (scale <= 1.0) {
            EventBus_Singleton.getInstance().post(new EventBus_Poster("pinched_map", "out"));
        } else {
            EventBus_Singleton.getInstance().post(new EventBus_Poster("pinched_map", "in"));
        }

        return true;
    }
};
private final scalegestruedetector.OnScaleGestureListener MSCalgestureListener
=新的scalegstruedetector.SimpleOnScalegstrueListener(){
/**
*这是视口中的活动焦点。可能是局部焦点
*变量,但保留在此处以最小化每帧分配。
*/
浮动启动跨度;
浮动开始焦点;
浮式startFocusY;
@凌驾
在ScaleBegin上的公共布尔值(ScaleGetStureDetector ScaleGetDetector){
startingSpan=scalegestruedetector.getCurrentSpan();
startFocusX=scalegestruedetector.getFocusX();
startFocusY=scalegestruedetector.getFocusY();
返回true;
}
@凌驾
规模上的公共布尔值(scalegestruedetector scalegestruedetector){
float scale=scalegestruedetector.getCurrentSpan()/startingSpan;
mVelocityTracker.计算流速(1000);
Log.d(“VELOCITY”,“X vel:+mVelocityTracker.getXVelocity());
Log.d(“速度”,“Y级别:”+mVelocityTracker.getYVelocity());

如果(缩放)要停止滚动,则可以使用UiSettings.setScrollGesturesEnabled(false)。我希望地图在缩放时保持在中心位置,在正常情况下,当我们缩放它时,它将被拖走。如果你否决了这个问题,至少要发表评论,并给出充分的理由。你的问题在帖子上解决了吗?@bjiang部分解决了。我也需要实现“收缩”缩放。为Shvet解决了?还是其他人接受了?让我们知道你这边的结果?Y是的,它可以根据我的需要为我工作,但有时它也会拖动地图,因为我希望用户拖动它。拖动是什么意思?例如,当你用一个手指开始从左到右从上向下拖动地图时会发生什么动作?或者当你上下移动地图上的相机时会平移?当我从s中取出fingures后,它会缩小Creen它现在的实现方式,正如您在上面的日志集代码中看到的,不是100%:)我应该提到这一点,因为自从我发布上述内容以来,我已经停止了该项目的工作,对不起。但毫无疑问,需要测量速度,这只意味着我测量的是错误的