在已缩放的视图上缩放动画

时间:2013-08-28 10:49:34

标签: android android-animation

我使用以下缩放动画制作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时,这会导致大小明显跳跃。

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

2 个答案:

答案 0 :(得分:2)

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

<?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" />

答案 1 :(得分:0)

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

Determining the size of an Android view at runtime