Android Street View API animateTo问题

时间:2015-08-06 10:08:08

标签: android google-maps google-street-view

我正在构建一个包含街景的Android应用程序。在某些情况下,我想手动设置相机POV。

我看了导游on Google's dev website,但我似乎无法让它发挥作用。

我可以在我的应用程序中显示街景,我可以移动相机,但它不会移动到我自定义的相机/ FOV。

我的Java代码:

package com.mycompany.appname;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.model.LatLng;
import java.util.Random;
import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.StreetViewPanoramaCamera;
import com.google.android.gms.maps.model.StreetViewPanoramaOrientation;

public class RaceMap extends FragmentActivity implements OnStreetViewPanoramaReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_race_map);
        StreetViewPanoramaFragment streetViewPanoramaFragment =
                (StreetViewPanoramaFragment) getFragmentManager()
                        .findFragmentById(R.id.streetviewpanorama);
        streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
    }

    @Override
    public void onStreetViewPanoramaReady(StreetViewPanorama panorama)  {
        long duration = 20;
        float tilt = 30;
        float bearing = 90;
        StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
                .zoom(panorama.getPanoramaCamera().zoom)
                .bearing(bearing)
                .tilt(tilt)
                .build();

        panorama.setPosition(new LatLng(52.208818, 0.090587));
        panorama.setStreetNamesEnabled(false);
        panorama.setZoomGesturesEnabled(false);
        panorama.animateTo(camera, duration);

    }
}

我的活动:

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.mycompany.appname.RaceMap"
    android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
    android:id="@+id/streetviewpanorama"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

3 个答案:

答案 0 :(得分:2)

尝试设置超过500毫秒的持续时间,你会看到你想要的。 1秒就足够了。

final long duration = 1000;
panorama.animateTo(camera, duration);

我认为这可能是StreetView的一些错误。持续时间值小于500不能正常工作。或者地图没有足够的时间制作动画。

答案 1 :(得分:2)

我遇到了类似的问题,这似乎与应用setPosition()的延迟有关,最终会超越相机位置动画。我的解决方案是在调用animTo()之前等待位置更改。

我同意@pengrad关于非常短暂的动画持续时间

@Override
public void onStreetViewPanoramaReady(final StreetViewPanorama panorama)  {
    final long duration = 1000; 
    float tilt = 30;
    float bearing = 90;
    final StreetViewPanoramaCamera camera = new StreetViewPanoramaCamera.Builder()
            .zoom(panorama.getPanoramaCamera().zoom)
            .bearing(bearing)
            .tilt(tilt)
            .build();

    panorama.setPosition(new LatLng(52.208818, 0.090587));
    panorama.setStreetNamesEnabled(false);
    panorama.setZoomGesturesEnabled(false);

    panorama.setOnStreetViewPanoramaChangeListener(new StreetViewPanorama.OnStreetViewPanoramaChangeListener() {
        @Override
        public void onStreetViewPanoramaChange(StreetViewPanoramaLocation streetViewPanoramaLocation) {
            if (streetViewPanoramaLocation != null) {
                panorama.animateTo(camera, duration);
            }
        }
    });
}

答案 2 :(得分:0)

如果要继续前进,请使用以下两种方法:

float difference(StreetViewPanoramaLink link) {
        return Math.abs(panorama.getPanoramaCamera().bearing % 360 - link.bearing);
    }


    void moveForward() {
        StreetViewPanoramaLink curLink = null;
        for( int i=0; i < panorama.getLocation().links.length; i++) {
            float differ = difference(panorama.getLocation().links[i]);
            if(curLink == null) {
                curLink = panorama.getLocation().links[i];
            }
            if(difference(curLink) > difference(panorama.getLocation().links[i])) {
                curLink = panorama.getLocation().links[i];
            }
        }
        panorama.setPosition(curLink.panoId);
    }