如何使用ScaleAnimation在android中将布局缩放到特定大小(不是相对大小)?
我在我的activity_main.xml布局中有一个RelativeLayout。我已经定义其宽度和高度作为分别250dp和48dp,如在我的XML片段所示的下方。如何使用ScaleAnimation在android中将布局缩放到特定大小(不是相对大小)?
现在我想动画(缩放)其宽度从该值(默认值)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);
}
}
编辑:
这是我想动画布局。我试图创建一个图像,下面链接,解释我想要做的事情。布局内
意见将阿尔法动画为0(我可以完全阿尔法它的动画没有什么问题有:d)。左边是缩放后的布局,右边是缩放后的布局。缩放后,圆角应该形成一个圆。这就是为什么高度和宽度都需要相同(48dp)。左(顶部和底部)角落都向右(顶部和底部)角落移动。右边缘将保持静止。右边是枢轴。
对于支持不同分辨率的设备,可以将初始宽度和高度更改为wrap_content。别担心。但是在布局动画之后,高度和宽度需要相同,才能形成一个圆圈。
比例属性通过乘以其原始大小来影响视图的大小,因此它们不适合用于将动画设置为绝对大小,正如您找到的那样。
相反,使用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();
我已经编辑了问题,能够解释我正在尝试做什么。希望我的查询会很清楚:) –
即使在编辑之后,我相信我上面的答案就是你要找的。 –
为什么你需要使用特定的尺寸? Android支持超过10k设备与多个屏幕大小! –
我编辑过的问题。我试图解释我究竟在做什么:) –