我将我的 MapView(新 API v2)与属于路线的点列表一起使用。他们靠得很近。我的问题是,如果我执行调用的动画步骤
mMapInstance.animateCamera(CameraUpdateFactory.newLatLng(mNextPosition),ms, null);
摄影师表现得像一只勇敢的蚱蜢,夸张地摇出和摇进,在这个过程中所有幻灯片缓存都得到@##@#@#!
为路径设置动画并获得统一滚动体验的最佳方法是什么?速度不是问题,我会用低速,我对平滑度感兴趣...
如果我可以用手指模拟一条路径,我会非常高兴.. 因为 map 表现得很漂亮,并且缓存了很多图 block 。但是任何以编程方式移动 map 的尝试都会导致粗体动画、白屏、重新加载图 block ......
提前致谢!!!
最佳答案
我发现使用可选回调作为最终参数来显示递归解决方案可以提供流畅的动画效果。此代码放大,改变全景旋转的角度,然后再次放大;但是,当初始参数和初始回调相同时,它不喜欢它;我确信有更好的方法来调用递归,但希望这可以让您了解如何在功能上设置动画:
//initial zoom
static final int initZoom = 8;
//steps the zoom
int stepZoom = 0;
// number of steps in zoom, be careful with this number!
int stepZoomMax = 5;
//number of .zoom steps in a step
int stepZoomDetent = (18 - initZoom) / stepZoomMax;
//when topause zoom for spin
int stepToSpin = 4;
//steps the spin
int stepSpin = 0;
//number of steps in spin (factor of 360)
int stepSpinMax = 4;
//number of degrees in stepSpin
int stepSpinDetent = 360 / stepSpinMax;
Intent detailIntent;
Intent intent;
Marker marker;
final int mapHopDelay = 2000;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.map_affirm);
try
{MapsInitializer.initialize(this);}
catch (GooglePlayServicesNotAvailableException impossible)
{ /* Impossible */ Log.e(TAG, "the impossible occurred");}
intent = this.getIntent();
latLng = new LatLng(intent.getDoubleExtra("Latitude", 0.0), intent.getDoubleExtra("Longitude", 0.0));
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
map.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
.target(latLng)
.zoom(initZoom-1)
.build())
, mapHopDelay
, cameraAnimation
);
marker = map.addMarker(new MarkerOptions()
.draggable(true)
.position(latLng)
.title("Location of Photographer"));
}
public CancelableCallback cameraAnimation = new CancelableCallback(){
@Override
public void onFinish()
{
if (stepZoom < stepZoomMax && stepZoom != stepToSpin)
{
stepZoom++;
map.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
.target(latLng)
.zoom(initZoom + (stepZoomDetent * (stepZoom - 1)))
// .bearing(40*aniStep)
// .tilt(60)
.build()), mapHopDelay, cameraAnimation);
}
else if (stepZoom >= stepZoomMax)// ending position hard coded for this application
{map.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
.target(latLng)
.zoom(18)
// .bearing(0)
.tilt(0)
.build()));
}
else
{
if (stepSpin <= stepSpinMax)
{
stepSpin++;
map.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
.target(latLng)
.zoom(initZoom + stepZoomDetent * stepZoom)
.bearing(stepSpinDetent * (stepSpin - 1))
.tilt(60)
.build()), mapHopDelay, cameraAnimation);
}
else
{
stepZoom++;
map.animateCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder()
.target(latLng)
.zoom(initZoom + stepZoomDetent * stepZoom)
.bearing(0)
.tilt(0)
.build()), mapHopDelay, cameraAnimation);
}
}
}
@Override
public void onCancel()
{}
};
关于android - 在 map View 上平滑地动画化相机路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070202/