Android 缩放动画不流畅
Android Scale Animation not smooth
我不知道如何在 ImageView 上创建一个效果很好的 <scale>
动画,我用 Vector Drawable 创建了一个可以正常工作的动画,但是图像一点也不流畅,gif 在底部:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24px"
android:height="24px"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
>
<group android:name="background"
android:pivotX="12"
android:pivotY="12">
<path
android:name="circle"
android:fillColor="#F235"
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0" />
</group>
</vector>
动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="400"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="0.8"
android:valueType="floatType"
/>
<objectAnimator
android:duration="400"
android:propertyName="scaleY"
android:valueFrom="1.0"
android:valueTo="0.8"
android:valueType="floatType"
/>
<objectAnimator
android:duration="400"
android:startOffset="500"
android:propertyName="scaleX"
android:valueFrom="0.8"
android:valueTo="1"
android:valueType="floatType"
/>
<objectAnimator
android:duration="400"
android:startOffset="500"
android:propertyName="scaleY"
android:valueFrom="0.8"
android:valueTo="1"
android:valueType="floatType"
/>
</set>
这是我的图像缩放动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:toXScale="0.8"
android:fromYScale="1.0"
android:toYScale="0.8"
/>
<scale
android:startOffset="500"
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="0.8"
android:fromYScale="0.8"
android:toYScale="1.0"
android:toXScale="1.0" />
</set>
蓝色的是 Vector Drawable,红色的是使用 <scale>
动画的 ImageView
我知道可以通过删除第二个 <scale>
并添加
来解决
android:repeatMode="reverse"
android:repeatCount="1"
到第一个,但我想让它与两个 <scale>
命令一起工作
您的第二个动画应以 1.0
比例开始并以 1.25
:
结束
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:toXScale="0.8"
android:fromYScale="1.0"
android:toYScale="0.8"
/>
<scale
android:startOffset="500"
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.25"
android:toXScale="1.25" />
</set>
否则,立即应用比例 0.8
,没有 500 毫秒的延迟。 Related question
我不知道如何在 ImageView 上创建一个效果很好的 <scale>
动画,我用 Vector Drawable 创建了一个可以正常工作的动画,但是图像一点也不流畅,gif 在底部:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24px"
android:height="24px"
android:viewportWidth="24.0"
android:viewportHeight="24.0"
>
<group android:name="background"
android:pivotX="12"
android:pivotY="12">
<path
android:name="circle"
android:fillColor="#F235"
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0" />
</group>
</vector>
动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
android:duration="400"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="0.8"
android:valueType="floatType"
/>
<objectAnimator
android:duration="400"
android:propertyName="scaleY"
android:valueFrom="1.0"
android:valueTo="0.8"
android:valueType="floatType"
/>
<objectAnimator
android:duration="400"
android:startOffset="500"
android:propertyName="scaleX"
android:valueFrom="0.8"
android:valueTo="1"
android:valueType="floatType"
/>
<objectAnimator
android:duration="400"
android:startOffset="500"
android:propertyName="scaleY"
android:valueFrom="0.8"
android:valueTo="1"
android:valueType="floatType"
/>
</set>
这是我的图像缩放动画:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:toXScale="0.8"
android:fromYScale="1.0"
android:toYScale="0.8"
/>
<scale
android:startOffset="500"
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="0.8"
android:fromYScale="0.8"
android:toYScale="1.0"
android:toXScale="1.0" />
</set>
蓝色的是 Vector Drawable,红色的是使用 <scale>
我知道可以通过删除第二个 <scale>
并添加
android:repeatMode="reverse"
android:repeatCount="1"
到第一个,但我想让它与两个 <scale>
命令一起工作
您的第二个动画应以 1.0
比例开始并以 1.25
:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:toXScale="0.8"
android:fromYScale="1.0"
android:toYScale="0.8"
/>
<scale
android:startOffset="500"
android:duration="400"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.25"
android:toXScale="1.25" />
</set>
否则,立即应用比例 0.8
,没有 500 毫秒的延迟。 Related question