我的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);
}
}
修改
这就是我想要布局动画的方式。我试图创建一个图像,它在下面链接,以解释我正在尝试做什么。
布局中的视图将alpha动画为0.(我可以完美地对其进行动画处理。没有问题:D)。左边是缩放前的布局,右边是缩放后的布局。缩放后,圆角应形成圆形。这就是为什么高度和宽度需要相同(48dp)。左(顶部和底部)角都朝向右(顶部和底部)两个角移动。右边缘将保持静止。右边是枢轴。
对于支持不同分辨率的设备,可以将初始宽度和高度更改为wrap_content。别担心。但在制作动画布局后,高度和宽度需要相同,才能形成一个圆圈。
答案 0 :(得分:0)
缩放属性会通过乘以其原始大小来影响视图的大小,因此它们不适合您设置的绝对大小的动画。
相反,将ValueAnimator
与AnimatorUpdateListener
结合使用可设置视图的宽度。
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();