假设我们想要一个可以水平“摇动”视图的动画.
我们做这样的事情:
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-delta”表示为视图宽度的比例会更好:
float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();
但是……为了做到这一点,我们必须能够在代码中设置“ x-delta”……我看不到这样做的方法.
我尝试输入“ animShake”. -“点”-并查看可用的选项…尽管有一些设置器,但是似乎没有一个设置“ x-delta”.我想我应该放弃并尝试使用其他动画技术完全不同的方法,但是我简直不敢相信这是不可能的.
是否可以通过编程方式更改Animation实例的“ x-delta”?
解决方法:
您可以在xml中使用可选的%p来控制相对于父级大小的移动量.喜欢:
android:fromXDelta="-5%p"
android:toXDelta="5%p"