假设我们想要一个能够水平“抖动”视图的动画。
我们可以这样写:
Java:
然而,由于我们非常谨慎,我们意识到在xml中定义的“摇动距离”是以dp/像素为单位解释的静态距离,在不同的设备上会有所不同 - 在高分辨率设备上,移动将是微妙的...就像电动牙刷一样,但在低分辨率设备上,移动将会像二手车展销场上那些挥舞的充气娃娃一样剧烈。更好的方法是将“x-增量”表示为视图宽度的比率:
我们可以这样写:
Java:
private void shakeView(final View v) {
v.clearAnimation();
Animation animShake = AnimationUtils.loadAnimation(this, R.anim.shake);
v.startAnimation(animShake);
}
xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="60"
android:fromXDelta="-20"
android:toXDelta="20"
android:repeatCount="14"
android:repeatMode="reverse"
android:interpolator="@android:anim/linear_interpolator" />
</set>
然而,由于我们非常谨慎,我们意识到在xml中定义的“摇动距离”是以dp/像素为单位解释的静态距离,在不同的设备上会有所不同 - 在高分辨率设备上,移动将是微妙的...就像电动牙刷一样,但在低分辨率设备上,移动将会像二手车展销场上那些挥舞的充气娃娃一样剧烈。更好的方法是将“x-增量”表示为视图宽度的比率:
float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();
但是...要做到这一点,我们必须能够在代码中设置“x-delta”...我看不到任何办法可以做到这一点。
我尝试输入“animShake.”--“dot”,并查看可用选项...虽然有一些setter,但似乎没有一个允许设置“x-delta”。我想我应该放弃,并尝试使用其他动画技术完全不同的方法,但我就是不相信这是不可能的。
是否可以在程序中修改动画实例的“x-delta”?