我试图在Android中创建(我认为是)相对简单的动画。也就是说,我想让某个TextView缩小到0,并在点击一个按钮时回到1。当我点击按钮时实际发生的事情是TextView立刻缩小到0(没有动画),然后动画只缩放回到1.TextView:缩小比例并按顺序动画放大
在一些失败的尝试只使用View.animate()方法后,我诉诸了到动画和AnimatorSet和限定在动画XML象下面这样:
scale_down.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="scaleX"
android:valueFrom="0"
android:valueTo="1"
android:duration="300"/>
<objectAnimator
android:propertyName="scaleY"
android:valueFrom="0"
android:valueTo="1"
android:duration="300"/>
</set>
scale_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="scaleX"
android:valueFrom="1"
android:valueTo="0"
android:duration="300"/>
<objectAnimator
android:propertyName="scaleY"
android:valueFrom="1"
android:valueTo="0"
android:duration="300"/>
</set>
代码在动画()方法,从的onClick()方法
private void animate() {
Animator scaleTextDown = AnimatorInflater.loadAnimator(this, R.animator.scale_down);
scaleTextDown.setTarget(mFactTextView);
Animator scaleTextUp = AnimatorInflater.loadAnimator(this, R.animator.scale_up);
scaleTextDown.setTarget(mFactTextView);
AnimatorSet setScaleDownAndUp = new AnimatorSet();
setScaleDownAndUp.playSequentially(scaleTextDown, scaleTextUp);
setScaleDownAndUp.start();
}
当我试图创建使用简单View.animate()我得到了它的方法预期动画被称为使用处理器工作在下面的onClick()方法中添加一个break,但我怀疑这是做到这一点的“正确”方法。
public void onClick(View view) {
//...
mFactTextView.animate().scaleX(0).scaleY(0).setDuration(300).start();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mFactTextView.animate().scaleX(1).scaleY(1).setDuration(300).start();
}
}, 300);
//...
}
所以上面显然这个简单的代码工作,而无需使用任何XML等
的我是比较新的Android和我已经开始探索动画,所以我询问是否实际上是一个有“更好”的方式来连续链接这些动画?我的意思是playSequentially()方法的存在表明应该有一种方法可以在没有Handler的情况下完成这项工作。也许问题是两个动画都涉及同一个对象,但我想这不是一个罕见的用例。虽然它只是相反方向的动画,但它仍然是罕见的用例。
编辑:我更新了XML代码,以正确反映预期的缩放比例(谢谢azizbekian),它仍然无法按预期工作。我现在正在得到相反的行为。在初始点击按钮时,文本现在简单地缩小到0并丢失。在后续点击时,它会以全尺寸(无缩放动画)简要显示,然后将缩放动画缩小到0,然后再次丢失。
从技术上讲,在最初的XML文件和更新的文件(下面)中,只有第一个动画实际上正在发生,至少在视觉上 - scale_down.xml被用作Animator的源。
scale_down.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="scaleX"
android:valueFrom="1"
android:valueTo="0"
android:duration="300"/>
<objectAnimator
android:propertyName="scaleY"
android:valueFrom="1"
android:valueTo="0"
android:duration="300"/>
</set>
scale_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:propertyName="scaleX"
android:valueFrom="0"
android:valueTo="1"
android:duration="300"/>
<objectAnimator
android:propertyName="scaleY"
android:valueFrom="0"
android:valueTo="1"
android:duration="300"/>
</set>
感谢您提供withEndAction()API并发现XML文件中的错误。但是,即使在我更新XML之后,我仍然有相同(或类似)的问题 - 主要问题更新中的更多细节。 –
@BobanTalevski,已更新。 – azizbekian