Google街景+设备倾斜

Google Street view + device tilting

我正在尝试将 activity 作为一项功能添加到我正在构建的应用程序中,API 将 return 一个纬度,并且这个纬度我将加载 google 街景。其中随着设备的移动,位置将旋转 360 度角。我在设备的运动部分苦苦挣扎。在屏幕上用手指可以旋转。我想知道是否有人可以指出正确的方向,让设备移动来影响街景的位置?

我目前的代码是:

import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback;
import com.google.android.gms.maps.StreetViewPanorama;
import com.google.android.gms.maps.StreetViewPanoramaFragment;
import com.google.android.gms.maps.StreetViewPanoramaOptions;
import com.google.android.gms.maps.StreetViewPanoramaView;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.StreetViewPanoramaCamera;
import com.google.android.gms.maps.model.StreetViewPanoramaLocation;

public class MainActivity extends FragmentActivity
        implements OnStreetViewPanoramaReadyCallback {

    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        StreetViewPanoramaFragment streetViewPanoramaFragment =
                (StreetViewPanoramaFragment) getFragmentManager()
                        .findFragmentById(R.id.streetviewpanorama);
        streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);

    }

    @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);
                }
                Log.d(TAG, "TESTINGGGGGGGGGG");
            }
        });
    }
}

我不确定你的问题,所以如果我错了请发表评论,但你似乎可以轮流完成此说明

panorama.animateTo(camera, duration);

并且您正在使用之前构建的 "camera" 变量移动到特定位置。

因此,如果我正确理解您要尝试做什么,您必须检查移动phone 传感器(加速度计和位置)以获得动作,然后将正确的动作应用于全景图。查看 android sensor documentation 以获得正确的侦听器(或如何注册传感器使用),然后根据 phone 注册的加速度构建正确的相机对象(左加速度 -> 向左旋转, 向右加速 --> 向右旋转).

如果您需要代码示例,我建议您查看 this question,其中有一些其他链接可以帮助您使用传感器和获取更多文档。

如果这没有帮助,请评论 and/or 澄清问题。