如何使用ScaleAnimation在Android中将布局缩放到特定大小(而不是相对大小)?

时间:2017-07-16 15:01:11

标签: android android-layout

我的activity_main.xml布局中有 RelativeLayout 。我已将宽度高度分别定义为 250dp 48dp ,如下所示xml代码段

现在我想动画(缩放)宽度从该值(默认值)到 48dp ,(枢轴应该是右边缘) 。我试过使用ScaleAnimation,ValueAnimation,ObjectAnimation这样做,但似乎他们处理相对值

我想使用ScaleAnimation,如果可能的话。

这是我的RelativeLayout:

<RelativeLayout
    android:layout_width="250dp"
    android:layout_height="48dp"
    android:id="@+id/layout_1"
    android:layout_below="@id/default_layout"
    android:layout_centerHorizontal="true"
    android:background="@drawable/round_corner_layout_1">


        ...


</RelativeLayout>

这是我的scaleAnimate方法:

private void scaleAnimate(long startOffSet, int fromX, int fromY, int toX, int toY, int pivotTypeX, int pivotTypeY, float pivotX, float pivotY, int duration, Interpolator interpolator, final View... v){

    Animation animation = new ScaleAnimation(fromX, toX, fromY, toY, pivotTypeX, pivotX, pivotTypeY, pivotY);
    animation.setDuration(duration);
    animation.setFillAfter(true);
    animation.setInterpolator(interpolator);
    animation.setStartOffset(startOffSet);

    for(View view : v){
        view.setVisibility(View.VISIBLE);
        view.startAnimation(animation);
    }
}

修改

这就是我想要布局动画的方式。我试图创建一个图像,它在下面链接,以解释我正在尝试做什么。

Layout Scaling Interpretation

布局中的视图将alpha动画为0.(我可以完美地对其进行动画处理。没有问题:D)。左边是缩放前的布局,右边是缩放后的布局。缩放后,圆角应形成圆形。这就是为什么高度和宽度需要相同(48dp)。左(顶部和底部)角都朝向右(顶部和底部)两个角移动。右边缘将保持静止。右边是枢轴。

对于支持不同分辨率的设备,可以将初始宽度和高度更改为wrap_content。别担心。但在制作动画布局后,高度和宽度需要相同,才能形成一个圆圈。

1 个答案:

答案 0 :(得分:0)

缩放属性会通过乘以其原始大小来影响视图的大小,因此它们不适合您设置的绝对大小的动画。

相反,将ValueAnimatorAnimatorUpdateListener结合使用可设置视图的宽度。

ValueAnimator anim = ValueAnimator.ofInt(v.getMeasuredWidth(), END_WIDTH);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animator) {
        ViewGroup.LayoutParams params = v.getLayoutParams();
        params.width = (int) animator.getAnimatedValue();
        v.setLayoutParams(params);
    }
});
...
anim.start();