有没有办法让多段线动画化?
is there a way i can animate a polyline?
类似于标记周围的脉冲环。我想要实现的是这个......
我有很多折线都有 Lat/Lng。在时间 t,用户可以决定选择他们选择的任何折线。我通过蓝牙获取他们当前的实时位置坐标。我想使用该位置来确定他们与他们选择的折线的距离,并根据距离 change/animate 该折线。我正在使用 google 地图 API、android studio、kotlin
这是一个简单的示例 - 一个采用 Polyline
实例和处理程序(必须在主循环程序上)并开始重复更新多段线宽度的方法。
(添加了 Kotlin)
private lateinit var polyline: Polyline;
private lateinit var handler : Handler;
override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
var ptlist = ArrayList<LatLng>();
// add polyline
ptlist.add(LatLng(40.437761, -3.704751));
ptlist.add(LatLng( 40.405072, -3.678678));
ptlist.add(LatLng( 40.397158, -3.742706));
ptlist.add(LatLng(40.437761, -3.704751));
handler = Handler(Looper.getMainLooper());
polyline = mMap.addPolyline(PolylineOptions().addAll(ptlist));
val runnableCode = object: Runnable {
override fun run() {
var w = polyline.width;
w = w + 0.5f;
if (w > 25.0) {
w = 1.0f;
}
polyline.setWidth(w);
handler.postDelayed(this, 50);
}
}
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(40.415521, -3.700995), 12f));
handler.postDelayed(runnableCode, 50);
}
在此示例中,多段线 p
的宽度将从 [25.0 1.0] 开始变化,每 200 毫秒递增 0.5。当它达到最大宽度时,它被重置为宽度 1.0。忽略原来的宽度。
显然根据需要更改参数 - 或者使其脉冲输入和输出。
(Java 等效 - 动画参数不同。)
public void pulsePolyline(final Polyline p, final Handler h)
{
h.postDelayed(new Runnable() {
@Override
public void run() {
float w = p.getWidth();
w = (w + 0.1);
if (w > 10.0) w = 1.0;
p.setWidth(w);
h.postDelayed(this, 200);
}
}, 200);
}
注意处理程序必须来自主线程(或循环程序),如:
new Handler(Looper.getMainLooper())
类似于标记周围的脉冲环。我想要实现的是这个...... 我有很多折线都有 Lat/Lng。在时间 t,用户可以决定选择他们选择的任何折线。我通过蓝牙获取他们当前的实时位置坐标。我想使用该位置来确定他们与他们选择的折线的距离,并根据距离 change/animate 该折线。我正在使用 google 地图 API、android studio、kotlin
这是一个简单的示例 - 一个采用 Polyline
实例和处理程序(必须在主循环程序上)并开始重复更新多段线宽度的方法。
(添加了 Kotlin)
private lateinit var polyline: Polyline;
private lateinit var handler : Handler;
override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
var ptlist = ArrayList<LatLng>();
// add polyline
ptlist.add(LatLng(40.437761, -3.704751));
ptlist.add(LatLng( 40.405072, -3.678678));
ptlist.add(LatLng( 40.397158, -3.742706));
ptlist.add(LatLng(40.437761, -3.704751));
handler = Handler(Looper.getMainLooper());
polyline = mMap.addPolyline(PolylineOptions().addAll(ptlist));
val runnableCode = object: Runnable {
override fun run() {
var w = polyline.width;
w = w + 0.5f;
if (w > 25.0) {
w = 1.0f;
}
polyline.setWidth(w);
handler.postDelayed(this, 50);
}
}
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(40.415521, -3.700995), 12f));
handler.postDelayed(runnableCode, 50);
}
在此示例中,多段线 p
的宽度将从 [25.0 1.0] 开始变化,每 200 毫秒递增 0.5。当它达到最大宽度时,它被重置为宽度 1.0。忽略原来的宽度。
显然根据需要更改参数 - 或者使其脉冲输入和输出。
(Java 等效 - 动画参数不同。)
public void pulsePolyline(final Polyline p, final Handler h)
{
h.postDelayed(new Runnable() {
@Override
public void run() {
float w = p.getWidth();
w = (w + 0.1);
if (w > 10.0) w = 1.0;
p.setWidth(w);
h.postDelayed(this, 200);
}
}, 200);
}
注意处理程序必须来自主线程(或循环程序),如:
new Handler(Looper.getMainLooper())