我正在尝试在Android中创建(我认为是)一个相对简单的动画。即,我想获得某个TextView,只需单击一个按钮即可将其缩小到0,然后又放大到1。当我单击按钮时,实际发生的情况是TextView立即缩小为0(没有动画),然后仅将缩放动画设置为1。
在仅使用View.animate()方法进行了一些失败的尝试之后,我求助于Animator和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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
从onClick()方法调用的animate()方法中的代码
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();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用简单的View.animate()方法创建预期的动画时,我通过使用处理程序在onClick()方法内添加一个中断来使其工作,如下所示,但是我怀疑这是“正确”的方法它。
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(); …Run Code Online (Sandbox Code Playgroud)