【问题标题】:Google Street view + device tilting谷歌街景+设备倾斜
【发布时间】:2017-04-06 14:50:28
【问题描述】:

我正在尝试将活动作为一项功能添加到我正在构建的应用程序中,API 将返回一个经纬度,并且使用这个经度经度,我将加载谷歌街景。其中随着设备的移动,会旋转 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");
            }
        });
    }
}

【问题讨论】:

  • 为什么要硬编码倾斜和方位?我建议您按照doc example中提供的方式使用它

标签: java android google-street-view


【解决方案1】:

我不确定你的问题,所以如果我错了请评论,但似乎你可以通过这个指令轮换

panorama.animateTo(camera, duration);

并且您正在使用之前构建的“相机”变量移动到特定位置。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多