如何让我的圈子闪烁/闪烁(Google Maps API V2 android)

时间:2014-06-17 23:18:31

标签: android google-maps animation android-activity

我是应用开发的新手。基本上我一直在关注Google Developers网站上的教程,让我的地图和圆圈显示出来(我还在浏览时找到了一个标记和圆圈动画)。现在我需要我闪烁/闪烁/闪烁的圆圈,你有什么,但我不知道从哪里开始。

这是我的MainActivity.java

public class MainActivity extends ActionBarActivity {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    //marker
    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    mMap.addMarker(new MarkerOptions()
            .position(new LatLng(/*coordinates*/,/*coordinates*/))
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));

    //this doesn't work on my emulator     
    mMap.setMyLocationEnabled(true);

    // Instantiates a new CircleOptions object and defines the center and radius
    CircleOptions circleOptions = (new CircleOptions()
            .center(new LatLng(/*coordinates*/,/*coordinates*/))
            .radius(1000) // In meters
            //.fillColor(Color.GREEN)
            .fillColor(0xff00bb00)
            //.strokeColor(Color.GREEN));
            .strokeColor(0xff000000)).strokeWidth(2);
    // Get back the mutable Circle, not sure what this means yet
    Circle circle = mMap.addCircle(circleOptions);

    //fiddling w/ circle animation
    final Circle SFcircle = mMap.addCircle(new CircleOptions()
            .center(new LatLng(/*coordinates*/,/*coordinates*/))
            .radius(100)
            .strokeColor(Color.RED).radius(1000));

    ValueAnimator vAnimator = new ValueAnimator();
    vAnimator.setRepeatCount(ValueAnimator.INFINITE);
    vAnimator.setRepeatMode(ValueAnimator.RESTART);  /* PULSE */
    vAnimator.setIntValues(0, 100);
    vAnimator.setDuration(1000);
    vAnimator.setEvaluator(new IntEvaluator());
    vAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
    vAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            float animatedFraction = valueAnimator.getAnimatedFraction();
            // Log.e("", "" + animatedFraction);
            SFcircle.setRadius(animatedFraction * 1000);
        }
    });
    vAnimator.start();
}

我访问了这些页面。

Blinking marker in android Google maps v2

- 我不确定如何/在哪里实现那里提供的两个代码块(我需要它用于圆圈而不是标记)。我尝试将该方法置于私有GoogleMap mMap和vAnimator.start();下的顶部代码块中,但我遇到了一些错误。

How to show icon blinking on google map

- 这似乎是在XML文件而不是java中。我不确定,但似乎它们对我们来说意味着我们的文件夹中已有可绘制的图片并将它们交替出来;其中,整个过程让我感到困惑(即如何工作?图片需要的尺寸是什么?我在哪里放图片以及如何访问图片?)

我遇到的一个更普遍的问题是:如果我需要动画/设计,如果我无法在网上专门找到它,我将如何找到如何开始实施?

1 个答案:

答案 0 :(得分:0)

我找到了一种向标记添加脉动动画的解决方案。 这是地图部分,这里变量“map”表示你的地图。

private Circle lastUserCircle;
private long pulseDuration = 1000;
private ValueAnimator lastPulseAnimator;

private void addPulsatingEffect(Latlng userLatlng){
           if(lastPulseAnimator != null){
                lastPulseAnimator.cancel();
                Log.d("onLocationUpdated: ","cancelled" );
            }
            if(lastUserCircle != null)
                lastUserCircle.setCenter(userLatlng);
            lastPulseAnimator = valueAnimate(userLocation.getAccuracy(), pulseDuration, new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    if(lastUserCircle != null)
                        lastUserCircle.setRadius((Float) animation.getAnimatedValue());
                    else {
                        lastUserCircle = map.addCircle(new CircleOptions()
                                .center(userLatlng)
                                .radius((Float) animation.getAnimatedValue())
                                .strokeColor(Color.RED)
                                .fillColor(Color.BLUE));
                    }
                }
            }); 

}
protected ValueAnimator valueAnimate(float accuracy,long duration, ValueAnimator.AnimatorUpdateListener updateListener){
        Log.d( "valueAnimate: ", "called");
        ValueAnimator va = ValueAnimator.ofFloat(0,accuracy);
        va.setDuration(duration);
        va.addUpdateListener(updateListener);
        va.setRepeatCount(ValueAnimator.INFINITE);
        va.setRepeatMode(ValueAnimator.RESTART);

        va.start();
        return va;
    }

希望这有帮助。