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

Android onTouchEvent 中 ScaleAnimation 中心點偏移問題解決

     編輯:程式設計疑難解答

問題現象

在 onTouchEvent 中對 ImageView 先 setX/setY 移動位置,再啟動 ScaleAnimation,導致縮放中心點不固定,動畫效果異常。

根本原因

ScaleAnimation 的縮放中心點由構造函數參數(RELATIVE_TO_SELF, 0.5f)決定,但若在動畫前改變 View 的 X/Y,View 的幾何中心相對父容器發生變化,導致視覺中心偏移。

推薦方案:使用 ValueAnimator 手動控制縮放

ValueAnimator animator = ValueAnimator.ofFloat(1f, 0.5f);
animator.addUpdateListener(animation -> {
    float scale = (float) animation.getAnimatedValue();
    view.setScaleX(scale);
    view.setScaleY(scale);
});
animator.setDuration(500);
animator.setRepeatCount(1);
animator.setRepeatMode(ValueAnimator.REVERSE);

// onTouch 中
view.setPivotX(view.getWidth() / 2f);
view.setPivotY(view.getHeight() / 2f);
view.setX(event.getX() - view.getWidth() / 2);
view.setY(event.getY() - view.getHeight() / 2);
animator.start();

關鍵點

  • 先設置 setPivotX/Y 固定縮放中心為 View 自身中心。
  • 再調整位置,最後啟動動畫。
  • ValueAnimator 直接操作 scaleX/scaleY,不依賴佈局傳遞,效果更可控。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved