首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 淡入淡出動畫完整實現:ObjectAnimator + AnimatorSet 組合

     編輯:程式設計疑難解答

核心 API

  • ObjectAnimator.ofFloat(view, "alpha", 1f, 0f):淡出(透明度 1→0)。
  • ObjectAnimator.ofFloat(view, "alpha", 0f, 1f):淡入(0→1)。
  • AnimatorSet.play(anim1).before(anim2):順序播放。
  • AnimatorSet.play(anim1).with(anim2):並行播放。

完整示例:左淡出 → 右淡入 → 下移淡出 → 上移淡入 循環

ValueAnimator fadeOut = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f);
fadeOut.setDuration(1000);
fadeOut.setInterpolator(new AccelerateInterpolator());

ValueAnimator moveLeft = ObjectAnimator.ofFloat(view, "x", view.getX(), view.getX() - view.getWidth());
moveLeft.setDuration(1000);
moveLeft.setInterpolator(new DecelerateInterpolator());

AnimatorSet leftOut = new AnimatorSet();
leftOut.play(moveLeft).before(fadeOut); // 先左移再淡出

ValueAnimator fadeIn = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
fadeIn.setDuration(1000);
ValueAnimator moveRight = ObjectAnimator.ofFloat(view, "x", view.getX() + 2*view.getWidth(), view.getX());
moveRight.setDuration(1000);
AnimatorSet rightIn = new AnimatorSet();
rightIn.play(fadeIn).with(moveRight); // 淡入同時右移進場

AnimatorSet sequence = new AnimatorSet();
sequence.playSequentially(leftOut, rightIn);
sequence.setStartDelay(500);
sequence.start();

關鍵點

  1. 動畫屬性用 "alpha"、"translationX"、"x" 等 View 屬性名。
  2. Interpolator 決定變化曲線:Accelerate 加速、Decelerate 減速、Linear 均速。
  3. AnimatorListenerAdapter 監聽 onAnimationEnd 鏈接下一組動畫。
  4. 釋放資源:onDestroy() 中 animator.cancel() 防內存洩漏。

靈活組合 ObjectAnimator + AnimatorSet,實現任意複雜的淡入淡出+位移+旋轉+縮放序列動畫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved