如何在android中动画地图填充

时间:2014-06-05 12:03:40

标签: android android-animation

我想以编程方式为视图的顶部地图填充设置动画,但我不知道如何执行此操作。

private GoogleMap map;
map.setPadding(left, top, right, bottom);

任何人都知道如何将top填充值设置为0到100?

4 个答案:

答案 0 :(得分:14)

地图填充不是视图属性,也不是对象属性。你可以通过给地图视图填充来测试它:

<com.google.android.gms.maps.MapView
    android:id="@+id/mapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"/>

结果是地图本身被填充,这与

不同
 map.setPadding(left, top, right, bottom);

setPadding是一种抵消地图内UI控件的方法。没有动画属性。幸运的是,android提供了ValueAnimator。您的问题可以通过这种方式解决:

ValueAnimator animation = ValueAnimator.ofInt(0, paddingBottom);
animation.setDuration(150);
animation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        getMap().setPadding(0, 0, 0, Integer.parseInt(valueAnimator.getAnimatedValue().toString()));
    }
});
animation.start();

这基本上是动画从0到paddingBottom的整数,没有任何上下文。您可以在onAnimationUpdate侦听器中创建上下文,并将动画填充值分配给地图填充。

答案 1 :(得分:1)

您可以使用Property Animation

答案 2 :(得分:1)

final int newTopMargin = <value>;
Animation anim = new Animation() {

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        LayoutParams params = yourView.getLayoutParams();
        params.topMargin = (int)(newTopMargin * interpolatedTime);
        yourView.setLayoutParams(params);
    }
};

yourView.startAnimation(anim);

你可以像上面描述的那样实现动画,虽然它不会用于填充,但它会设置你想要的动画效果的边距。

答案 3 :(得分:-1)

实际上,无需手动设置动画就可以非常简单地设置填充更改。

设置填充后,请调用

gooleMap.animateChanges(CameraUpdateFactory.newLatLngBounds(Bounds, padding));

或任何CameraUpdateFactory帮助器方法。

使用ValueAnimator比使用ValueAnimator更容易也更顺畅,尤其是在为多个填充边设置动画时。