我希望能在谷歌地图上显示用户的当前位置。目前一切工作正常,我只是使用标记来显示地图上的当前位置。现在我想让这个标记像安卓手机上原始的谷歌地图应用程序一样闪烁。我认为我需要使用动画来实现这个目的,但我不知道如何使用它。我在网上搜索,但没有找到任何解决方案。请有人帮帮我......
我希望能在谷歌地图上显示用户的当前位置。目前一切工作正常,我只是使用标记来显示地图上的当前位置。现在我想让这个标记像安卓手机上原始的谷歌地图应用程序一样闪烁。我认为我需要使用动画来实现这个目的,但我不知道如何使用它。我在网上搜索,但没有找到任何解决方案。请有人帮帮我......
Android 状态栏上的 GPS 图标会使用以下逻辑闪烁。保留两个可绘制对象,一个是暗淡图像,一个是明亮图像。在一定时间间隔内更改它们,这样看起来就像图像在闪烁。
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/dull" android:duration="10000" />
<item android:drawable="@drawable/bright" android:duration="10000" />
</animation-list>
这正是你所需要的
http://www.wiseandroid.com/post/2010/08/10/Making-a-simple-custom-Android-UI-animation.aspx
希望你能理解这段代码。 注意这个语句:
t.setAlpha(Math.abs(FloatMath.cos(period)));
我认为你必须编辑它,使其从1变为0,然后从0变为1...等等
由于标记本身不是一个视图,因此似乎不能使用动画框架。
因此,以下方法(尽管有些粗糙)可以工作,但为了保持重点: -它不会停止(只需在其他地方设置检查标志即可) -您将希望在下一个标记单击上取消它,以避免在同一个标记上多次运行
假设您有对标记的引用(例如使用onMarkerClick回调),并且正在执行UI线程。 使用标记的alpha设置,并将其从1.0减少或增加(在此示例中以0.1步长)到较低限制(在此示例中为0.5)
// Assume I have a marker reference 'm', e.g. from a onMarkerClick
// .. in context of onMarkerClick for example
// change the '500' (millis) to adjust the blinking rate.
new Handler().postDelayed(new AnimateMarker(m, 0.5F, 0.1F), 500);
...并在类中的其他地方定义
public class AnimateMarker implements Runnable {
float tgtalpha;
float delta;
private Marker m;
public AnimateMarker (Marker m, float tgt, float delta) {
this.m = m;
this.tgtalpha = tgt;
this.delta = delta;
}
@Override
public void run() {
float a = m.getAlpha();
if (a <= tgtalpha || a >= 1.0F) {
delta *= -1.0F;
}
a += delta;
m.setAlpha(a);
new Handler().postDelayed(new AnimateMarker(m, tgtalpha, delta), 500);
}
}
请注意,您可以在run()中执行不同的操作,例如使用旋转属性“旋转”标记:
// modified snippet of 'run' method
float a = m.getRotation();
if (a >= 350.0) {
a = 0;
} else {
a += 10.0F;
}
m.setRotation(a);
其他可能要操作的属性(或组合): - 锚点 - 如果聪明地使用,这将导致它摆动 - 可见性 - 使其出现/消失(可能很烦人)