【问题标题】:How to show icon blinking on google map如何在谷歌地图上显示闪烁的图标
【发布时间】:2011-07-18 06:22:34
【问题描述】:

我想在 Google 地图上显示用户的当前位置。每件事对我来说都很好。我只是使用标记在地图上显示当前位置。现在我想让那个标记像在安卓手机上的原始谷歌地图应用程序中一样闪烁。我想我必须为此目的使用动画,但我不知道如何使用它。我正在互联网上搜索它,但我没有得到任何解决方案。任何人都请帮助我......

【问题讨论】:

标签: android google-maps animation


【解决方案1】:

状态栏上的 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>

【讨论】:

  • @Vinoth:我想这仅适用于 imageview,并且您无法使用叠加层制作动画。您有任何方法可以使用叠加层制作动画吗?任何帮助将不胜感激。
  • 如何以编程方式@Vinoth?
【解决方案2】:

这正是你需要的

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...等等

【讨论】:

    【解决方案3】:

    由于标记本身不是视图,因此似乎不可能使用动画框架。

    因此,以下方法(尽管边缘粗糙)有效,但为了保持其正确性: - 它不会停止(只需添加一个标志以检查其他地方的设置) - 您需要在下一次单击标记时取消它以避免在同一标记上多次运行

    假设您有一个对标记的引用(例如,使用 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);
    

    其他可能操作的属性(或组合): - 锚点 - 如果做得巧妙,这将导致它摆动 - 可见性 - 让它出现/消失(可能很烦人)

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      相关资源
      最近更新 更多