在特定位置动画相机

时间:2015-02-25 11:32:57

标签: java android google-maps design-patterns builder

根据google developer's guide here,为特定位置的相机设置动画

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(MOUNTAIN_VIEW)      // Sets the center of the map to Mountain View
    .zoom(17)                   // Sets the zoom
    .bearing(90)                // Sets the orientation of the camera to east
    .tilt(30)                   // Sets the tilt of the camera to 30 degrees
    .build();                   // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

但是,在api reference中,CameraPosition已经将构造函数定义为:

public CameraPosition (LatLng target, float zoom, float tilt, float bearing)

所以,如果我写作:

  CameraPosition cameraPosition = new CameraPosition(latLng,9,0,0);

 CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(9).build();

它们是相同还是不同?是否需要使用静态嵌套类CameraPosition.Builder作为参考?

此外,两者都有相同的描述:

CameraPosition constructor

  

构造一个CameraPosition。

public CameraPosition build()

  

构建一个CameraPosition。

我怀疑单词constructsbuilds之间是否有任何区别。不幸的是,整个互联网上没有任何关于他们的差异的信息(如果存在)。有人可以帮忙吗?

修改 从评论中,有人指出它使用Builder设计模式。虽然,我不明白为什么在这里使用它?冗余构造函数的需求是什么?任何人都可以帮助我更好地理解吗?

2 个答案:

答案 0 :(得分:3)

我想Google之所以这样做的原因是清晰和方便。

以下哪项更具可读性?

CameraPosition cameraPosition = new CameraPosition(latLng, 11.0f, 0, 0);

CameraPosition cameraPosition = new CameraPosition.Builder()
        .target(latLng)
        .zoom(11.0f)
        .build();

您不必查找方法签名以了解要输入的参数。此外,您无需知道默认的倾斜度和轴承值。

答案 1 :(得分:2)

java中术语ConstructorBuilder之间的差异与Android相机API中CameraPosition constructorCameraPosition build()之间的差异相同。以下是基本的区别:

  • 当您想减少参数数量时,构建器比构造函数更有效。在POJO中进行对象调用时,构造函数往往有很多参数。
  • 构建器可以通过允许更简单的方法构建传递给方法的参数对象来间接帮助非构造方法。
  • 如果有太多参数,其中一些参数甚至为空,而且其中许多参数共享相同的数据类型,则应使用构建器。
  • IDE就像通过使用重构代码创建一个自动化的新Builder类来利用构建器。

在Android中为Camera API编写代码时,可以考虑所有这些要点,以获得更好和优化的性能。

有关代码实现,请参阅以下link