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

5

我正在使用以下缩放动画来为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个回答

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


不,我的目标是让缩放动画不从固定值(既非0.5也非1.0)开始,而是从ImageView的实际缩放值开始。这是必要的,因为我不知道在给定设备上View将被调整到什么大小。 - Herr von Wurst
谢谢你,但我认为你误解了问题。我的问题是ImageView在开始时可以有任何比例。从固定比例开始,无论我设置什么,都会产生明显的动画跳跃。 - Herr von Wurst

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接