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 澄清问题。
我正在尝试将 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 澄清问题。