【问题标题】:How to do android scale animation based on view's position on screen and focus that view in centre?如何根据视图在屏幕上的位置进行 android 缩放动画并将该视图聚焦在中心?
【发布时间】:2020-10-28 19:37:49
【问题描述】:

我想要这样的动画:Calendar Animation

我想在日历上缩放动画并关注当前日期到中心。 我是 android 动画的新手,我做了一些缩放工作:

zoom_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
    android:duration="1000"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="2"
    android:toYScale="2" />
</set>

但是使用它,它会将日历缩放到中心,但我希望当前日期在中心。 有人知道如何制作整个动画吗?任何帮助将不胜感激。

【问题讨论】:

    标签: android animation android-animation zooming scaling


    【解决方案1】:

    您需要获取要居中的视图/内容的位置,因为您需要进行一些翻译

    这里示例缩放到 TextView 的中心,在 ConstraintView 内具有随机位置

    要放大到您需要平移视图的特定位置,使该点位于中心,您可以通过更改 difX 和 difY 公式来实现

    float layoutWitdh = layout.getWidth();
            float layoutHeight = layout.getHeight();
    
            float x = view.getX();
            float y = view.getY();
            float w = view.getWidth();
            float h = view.getHeight();
    
            float difX = (layoutWitdh - w) / 2 - x;
            float difY = (layoutHeight - h) / 2 - y;
    
            view.animate().translationX(difX).translationY(difY).scaleY(5).scaleX(5).setDuration(1000);
    

    编辑:

    检查这个项目https://github.com/aiwiguna/AndroidZoom

    【讨论】:

    • 感谢重播,按照您的代码,我得到了这个结果:drive.google.com/file/d/1UpEajxSyAqtw4hNk16LlTUve3QNo-1JY/…
    • 我想在中心缩放当前日期,我已经用我的 LinearLayout 替换了布局,并用我当前日期的日历文本视图替换了视图。
    • 你需要获取当前日期的xy位置,我无法复制你的日历,所以我给出了如何放大的大致方向
    • 你能告诉我如何获取当前日期的 x y 位置吗!!
    • 就像我之前所说的,我无法复制您的日历,因为我不知道您如何显示日历、使用库或创建自己的日历
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多