我試圖在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