【问题标题】:Scaling animation on an already scaled view在已经缩放的视图上缩放动画
【发布时间】:2013-08-28 10:49:34
【问题描述】:

我正在使用以下比例动画为ImageView 制作动画:

<?xml version="1.0" encoding="utf-8"?>

<set    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="2.0"
        android:fromYScale="1.0"
        android:toYScale="2.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="1000" />

    <scale
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromXScale="2.0"
        android:toXScale="0.0"
        android:fromYScale="2.0"
        android:toYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="1000"
        android:duration="1000" />

    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:toDegrees="360" android:pivotX="50%" android:pivotY="50%"
        android:repeatCount="3"
        android:duration="800" android:startOffset="0" />
</set>

但问题是ImageView 在第一个动画开始时已经被布局缩放了。当第一个动画将比例设置为 1.0 时,这会导致尺寸明显跳跃。

有没有办法告诉动画它应该从布局中视图的实际大小开始? 我还尝试使用百分比,产生了相同的效果。

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    我从您的查询中了解到,您希望通过避免在开始时明显明显的缩放动画来使您的动画更流畅。我认为最小化第一个比例中的“从比例”可以帮助您避免跳跃,也许这样的事情会有所帮助:

    <?xml version="1.0" encoding="utf-8"?>
    

    <scale
        android:duration="1000"
        android:fromXScale="0.5"
        android:fromYScale="0.5"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <scale
        android:duration="1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="1000"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    
    <rotate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="800"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="3"
        android:startOffset="0"
        android:toDegrees="360" />
    

    抱歉让您久等了;试试这样的:

    <?xml version="1.0" encoding="utf-8"?>
    

    <scale
        android:duration="400"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="20%"
        android:pivotY="20%"
        android:repeatCount="1"
        android:repeatMode="reverse"
        android:toXScale="1.1"
        android:toYScale="1.1" />
    

    【讨论】:

    • 不,我想要完成的是让缩放动画不是从固定值(既不是 0.5 也不是 1.0)开始,而是从 ImageView 的实际缩放值开始。这是必要的,因为我不知道视图在给定设备上的大小。
    • 谢谢,但我认为您误解了这个问题。我的问题是 ImageView 在开始时可以有任何比例。无论我将其设置为什么,从固定比例开始都会在动画中产生明显的跳跃。
    【解决方案2】:

    我没有找到使用xml的方法,所以我最终使用这种方法在运行时确定大小并在Java中设置动画:

    Determining the size of an Android view at runtime

    【讨论】:

      猜你喜欢
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      相关资源
      最近更新 更多