我有一组两个动画,两个动画都使用过冲内插器一起运行
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/overshoot_interpolator" >
<translate
android:duration="6000"
android:fromXDelta="100%" android:toXDelta="0%" />
<scale
android:duration="6000"
android:fromXScale="1.0" android:toXScale="0.6"
android:pivotX="0"
android:fromYScale="1.0" android:toYScale="1.0"
android:repeatCount="1"
android:repeatMode="reverse" />
</set>
我希望translate
动画超调,scale
动画加速
我试图这样做,但它不起作用:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:interpolator="@android:anim/overshoot_interpolator"
android:duration="6000"
android:fromXDelta="100%" android:toXDelta="0%" />
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="6000"
android:fromXScale="1.0" android:toXScale="0.6"
android:pivotX="0"
android:fromYScale="1.0" android:toYScale="1.0"
android:repeatCount="1"
android:repeatMode="reverse" />
</set>
对于在单个对象上执行的所有动画,似乎在给定时间只能有一个插值器处于活动状态。
答案 0 :(得分:12)
这只是猜测工作。我记得AnimationSet
的一个构造函数可以接受一个参数,即 shareInterpolator 。
根据参数的名称判断,在这种情况下,这可能应该设置为false。现在,它应该使用默认的“值”。此默认值很可能是 true ,因为您的动画没有不同的插值器,尽管您为每个插件指定了不同的插值。
要确认,AnimationSet的源代码具有以下行来为shareInterpolator分配值(来自xml):
setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK,
a.getBoolean(com.android.internal.R.styleable.AnimationSet_shareInterpolator
, true));
这显然意味着如果未指定此布尔值,则默认为true。
<强>解决方案强>
要解决您的问题,我想您应该使用此“R.styleable.AnimationSet_shareInterpolator”指定它。这仅仅意味着 添加 android:shareInterpolator="false"
到您的 <set>
元素 强>
答案 1 :(得分:3)
我将分割动画并将其放在ImageView
上,另一个放在包含图像视图的RelativeLayout
上。
翻译
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:interpolator="@android:anim/overshoot_interpolator"
android:duration="6000"
android:fromXDelta="100%" android:toXDelta="0%" />
</set>
Scalor
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="6000"
android:fromXScale="1.0" android:toXScale="0.6"
android:pivotX="0"
android:fromYScale="1.0" android:toYScale="1.0"
android:repeatCount="1"
android:repeatMode="reverse" />
</set>
XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/previousItem"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:onClick="goToPreviousItem"
android:layout_margin="@dimen/float_from_edges"
android:layout_width="wrap_content"
>
<ImageView android:id="@+id/previousItemArrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/arrow_left"
/>
</RelativeLayout>
启动它的源代码:
RelativeLayout previousItemButton = (RelativeLayout)findViewById(R.id.previousItem);
ImageView myButton = (ImageView)findViewById(R.id.previousItemArrow);
Animation translator =
AnimationUtils.loadAnimation(this, R.anim.translator);
myButton.startAnimation(translator);
Animation scalor =
AnimationUtils.loadAnimation(this, R.anim.scalor);
previousItemButton.startAnimation(scalor);
我觉得它看起来很不错。我不确定你希望有什么效果。
答案 2 :(得分:1)
This xml works with both interpolators check this
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:interpolator="@android:anim/overshoot_interpolator"
android:fromXDelta="100%" android:toXDelta="0%"
android:duration="500" />
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="1.0" android:toXScale="0.6"
android:pivotX="0"
android:fromYScale="1.0" android:toYScale="1.0"
android:repeatCount="1"
android:repeatMode="reverse"
android:startOffset="500"
android:duration="1000" />
</set>