在地图 V2 上动画汽车标记运动
Animating car Marker movement on map V2
我正在使用实时位置更新为在街道上行驶的汽车制作动画。但是无论我朝哪个方向移动,汽车都面向真正的北方,方位 returns 0.0。是否有任何技巧可以使我的车前部向我移动的方向移动。这是我的代码。
private void draw_current_location(Location currentlocation) {
LatLng current = new LatLng(currentlocation.getLatitude(), currentlocation.getLongitude());
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(current, 15);
map.animateCamera(cameraUpdate);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
return;
}
Location calculatedLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(locationManager.getProvider(LocationManager.GPS_PROVIDER).supportsBearing()) {
float bearing = calculatedLoc.bearingTo(currentlocation);
centeredMap(current, bearing);
}
}
void centeredMap(final LatLng lalng, float bearng){
Location l = new Location("");
l.setLatitude(lalng.latitude);
l.setLongitude(lalng.longitude);
View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
if (customMarker != null) customMarker.remove();
customMarker = map.addMarker(new MarkerOptions()
.position(lalng)
.title("Title")
.snippet("Description")
.anchor(0.5f, 0.5f)
.flat(true)
.rotation(bearng)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.customIMAGE)));
Toast.makeText(getApplicationContext(), String.valueOf(l.getBearing()), Toast.LENGTH_SHORT).show();
customMarker.setPosition(lalng);
animation.animateMarker(l, customMarker);
}
更新:现在方位正在返回值。在我这样编辑我的代码之后。
if(locationManager.getProvider(LocationManager.GPS_PROVIDER).supportsBearing()) {
Location calculatedLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
float bearing = calculatedLoc.bearingTo(currentlocation);
Toast.makeText(getApplicationContext(), String.valueOf(bearing), Toast.LENGTH_SHORT).show();
centeredMap(currentlocation, bearing);
}
但是由于锚点(.5f,.5f),标记沿中心垂直轴旋转,但它无法识别我的汽车标记的前面,因此它不会沿街道设置动画。这辆车只是朝北的静态图像,当我移动时会被拖走。任何帮助将不胜感激。
我让它工作了。我打算在这个上拉我的头发。我什至打算用不同的旋转方式绘制多辆汽车,并使用开关盒或其他东西在所有汽车之间制作动画。但我没有走那么远。我有一辆面向北方的静态汽车,锚定在 (.5,.5) 并开到一个真正重要的距离,然后它开始旋转并跟随我的方向。
1) 只有在第一个位置和第二个位置之间存在几秒的差异时,方位才准确。 (位置更新越近,方位越不准确)为此,最好抓取更远的位置并根据您获得的方位设置动画方向;这不是实时动画(有一些延迟但看起来像真实的很棒的动画)。
2)您必须使用 GPS 提供商来获取方位。
我正在使用实时位置更新为在街道上行驶的汽车制作动画。但是无论我朝哪个方向移动,汽车都面向真正的北方,方位 returns 0.0。是否有任何技巧可以使我的车前部向我移动的方向移动。这是我的代码。
private void draw_current_location(Location currentlocation) {
LatLng current = new LatLng(currentlocation.getLatitude(), currentlocation.getLongitude());
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(current, 15);
map.animateCamera(cameraUpdate);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
return;
}
Location calculatedLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(locationManager.getProvider(LocationManager.GPS_PROVIDER).supportsBearing()) {
float bearing = calculatedLoc.bearingTo(currentlocation);
centeredMap(current, bearing);
}
}
void centeredMap(final LatLng lalng, float bearng){
Location l = new Location("");
l.setLatitude(lalng.latitude);
l.setLongitude(lalng.longitude);
View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
if (customMarker != null) customMarker.remove();
customMarker = map.addMarker(new MarkerOptions()
.position(lalng)
.title("Title")
.snippet("Description")
.anchor(0.5f, 0.5f)
.flat(true)
.rotation(bearng)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.customIMAGE)));
Toast.makeText(getApplicationContext(), String.valueOf(l.getBearing()), Toast.LENGTH_SHORT).show();
customMarker.setPosition(lalng);
animation.animateMarker(l, customMarker);
}
更新:现在方位正在返回值。在我这样编辑我的代码之后。
if(locationManager.getProvider(LocationManager.GPS_PROVIDER).supportsBearing()) {
Location calculatedLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
float bearing = calculatedLoc.bearingTo(currentlocation);
Toast.makeText(getApplicationContext(), String.valueOf(bearing), Toast.LENGTH_SHORT).show();
centeredMap(currentlocation, bearing);
}
但是由于锚点(.5f,.5f),标记沿中心垂直轴旋转,但它无法识别我的汽车标记的前面,因此它不会沿街道设置动画。这辆车只是朝北的静态图像,当我移动时会被拖走。任何帮助将不胜感激。
我让它工作了。我打算在这个上拉我的头发。我什至打算用不同的旋转方式绘制多辆汽车,并使用开关盒或其他东西在所有汽车之间制作动画。但我没有走那么远。我有一辆面向北方的静态汽车,锚定在 (.5,.5) 并开到一个真正重要的距离,然后它开始旋转并跟随我的方向。 1) 只有在第一个位置和第二个位置之间存在几秒的差异时,方位才准确。 (位置更新越近,方位越不准确)为此,最好抓取更远的位置并根据您获得的方位设置动画方向;这不是实时动画(有一些延迟但看起来像真实的很棒的动画)。 2)您必须使用 GPS 提供商来获取方位。