【问题标题】:Drawing different color polylines in android在android中绘制不同颜色的折线
【发布时间】:2014-10-30 01:38:25
【问题描述】:

我正在创建一个应用程序,它跟踪用户的位置并在调用 onLocationChange(Location location) 时绘制一条折线。折线颜色取决于加速度计。我知道如何使用折线,但 PolyLineOptions 对象只能是一种颜色。 我读到它可以通过使用 GroundOverlay 来实现,但是我不知道如何使用它以及在位图上绘制线条时如何使用我的位置(不知道如何使用它的坐标)。有人可以帮助我,提供一些示例链接吗?请注意,每条折线(或位图线)应在用户移动时动态添加。我已经进行了研究,但我发现的只是Drawing multi color PolyLines on Maps V2,它并不能解释一切。感谢您的帮助!

【问题讨论】:

  • 当用户移动时,您是否可以只使用一组点创建一条新的折线(您可以将其平滑以最小化点数),而不是附加到现有的折线?这样,如果您创建一条新的折线,那么您可以指定颜色。
  • onLocationChange 大约每秒被调用一次,所以我认为会有很多折线供处理器处理
  • 不要马上添加。首先收集它们,例如,一旦计数达到 1000 点(或计时器,每 5 分钟一次),首先将其平滑(以减少点数),然后用剩余的点添加一条新的折线。如果您的用户沿直线行驶,那么您的平滑算法应该只保留 2 个点。
  • 但这不是我想做的,因为我想在每个 locationChange 上画一条线,它的颜色取决于加速度计的变化,我想实时做
  • @user1275995 你曾经解决过你的问题吗?我面临着类似的事情

标签: android google-maps bitmap google-maps-android-api-2


【解决方案1】:

"在每个位置变化,它的颜色取决于加速度计 改变,我想实时做”

请注意,无论您是添加折线还是使用您想要的 GroundOverlay 方法,这可能会使您的应用显得迟缓或挂起。

无论如何,这就是我将如何使用“GroundOverlay 方法”

1.) 创建 n 个图像来代表每个速度范围。例如“慢”(0-1000)的红色图像,1001-2000的绿色图像等......)

2.) 定义一个数组,该数组将保存这些图像的资源 ID,按照您想要的顺序排列。例如:

int[] speedImageBucket = {R.drawable.slow,R.drawable.medium,R.drawable.fast};

3.) 因此,每次 locationChange 触发时,计算要添加的图像,并作为叠加层添加到地图中。示例:

....
float speed = loc.getSpeed(); // loc is the current location object passed in
int speedBucket = (int) (speed / 1000); // 1000 is the linear increment of your ranges for example

 //TODO: handle if speedBucket (array index) is out of range

 GoogleMap map = ...; // get a map.
 BitmapDescriptor image = BitmapDescriptorFactory.fromResource(speedImageBucket[speedBucket ]);; // get an image.

 // Adds a ground overlay with 50% transparency.
 GroundOverlay groundOverlay = map.addGroundOverlay(new GroundOverlayOptions()
 .image(image)
 .position(loc,1)
 .transparency(0.5));

【讨论】:

  • 好的,但是告诉我如何估计线的开始和结束,它的宽度不能固定它应该取决于加速度计数据所以它必须灵活,我不能只添加静态图片。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多