我正在使用翻译和缩放动画。首先,我将我的Frame Layout翻译到屏幕中心,然后使用布局参数将其位置参数设置到屏幕中心。这很好用!在翻译动画结束时,我运行缩放动画,我的布局比原始大小缩小了2倍。实际上我的框架布局(我正在制作动画)包括按钮和图像视图。在android中,动画不会转换视图,它只会改变必须绘制的位置。现在我的问题是我不能让我的按钮工作。因为他们实际上并不存在!
我通过在动画结束后设置其位置参数找到了翻译动画的解决方案。这会将视图永久移动到新位置。
然而,在缩放动画的情况下,我必须改变布局的尺寸以及其中的孩子。但它不起作用,因为我将原始高度宽度与缩放系数相乘。这是我的比例动画代码。
ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, 2.0f, 1.0f,
2.0f, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnim.setDuration(600);
// scaleAnim.setFillEnabled(true);
scaleAnim.setFillAfter(true);
view.setAnimation(scaleAnim);
view.startAnimation(scaleAnim);
scaleAnim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
FrameLayout.LayoutParams par = (FrameLayout.LayoutParams) view
.getLayoutParams();
par.height = view.getMeasuredHeight() * 2;
par.width = view.getMeasuredWidth() * 2;
view.setLayoutParams(par);
view.requestLayout();
}
});
p.s setFillAfter(true)和setFillEnabled(true)不是解决方案。
答案 0 :(得分:1)
我会在上面评论,但我没有足够的代表。文档中的这个页面解释了视图动画系统和属性动画系统之间的区别。从中可以创建ObjectAnimator和AnimatorSet对象,这些对象将移动按钮并编辑实际视图,而不仅仅是视图的绘制。
http://developer.android.com/guide/topics/graphics/prop-animation.html#views
属性动画系统允许View对象的简化动画,并提供优于视图动画系统的一些优点。视图动画系统通过更改它们的绘制方式来转换View对象。这是在每个View的容器中处理的,因为View本身没有可操作的属性。这导致View被动画化,但View对象本身没有任何变化。这导致诸如对象仍然存在于其原始位置的行为,即使它是在屏幕上的不同位置上绘制的。在Android 3.0中,添加了新属性以及相应的getter和setter方法以消除此缺点。
属性动画系统可以通过更改View对象中的实际属性来为屏幕上的Views设置动画。此外,Views还会自动调用invalidate()方法,以便在其属性发生更改时刷新屏幕。
答案 1 :(得分:0)
使用ObjectAnimator和AnimatorSet解决了这个问题。
答案 2 :(得分:0)
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(View.SCALE_X, 1, 1.2f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1, 1.2f);
ObjectAnimator scaleAnimation = ObjectAnimator.ofPropertyValuesHolder(your_view, pvhX, pvhY);
AnimatorSet setAnimation = new AnimatorSet();
setAnimation.play(scaleAnimation);
setAnimation.start();
答案 3 :(得分:0)
对我有用的解决方案
无需设置setFillAfter,因为我们正在设置视图的比例并自行平移,即使您设置了它,也不会发生任何问题。
scaleAnim.setFillAfter(true);
使用scaleX和scaleY调用设置动画结束后的视图比例
public void onAnimationEnd(Animation animation) {
par.setScaleX(2f)
par.setScaleY(2f)
view.requestLayout();
}
它将相应地放置缩放视图。