假设我们想要一个水平“震动”视图的动画。
我们这样做:
爪哇语:
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-delta”表示为视图宽度的比率:
float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();
但是。。。为了做到这一点,我们必须能够在代码中设置“x-delta”。。。我看不出有什么办法。
我试过键入“animShake。”--“dot”--并查看可用的选项。。。虽然有一些二传手,但他们似乎都不允许设置“x-delta”,我想我应该放弃使用其他动画技术尝试完全不同的方法,但我不敢相信这是不可能的。
是否可以编程更改动画实例的“x-delta”?