如何以编程方式更改动画实例的 "x-delta"?
How to programatically alter "x-delta" of an Animation instance?
假设我们想要一个水平 "shakes" 视图的动画。
我们这样做:
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中定义的"shake distance"是dp/pixels中解释的静态距离,因此将在不同的设备上会有所不同——在高分辨率设备上,运动会很微妙……就像电动牙刷一样,但在低分辨率设备上,运动会很剧烈,就像在旧车场里挥舞着的充气娃娃一样。
最好将 "x-delta" 表示为视图宽度的比率:
float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();
但是......为了做到这一点,我们必须能够在代码中设置 "x-delta"......但我看不出这样做的方式。
我尝试输入 "animShake." -- "dot" -- 并查看可用选项...虽然有一些设置器,但其中 none 似乎允许设置 "x-delta." 我想我应该放弃并使用其他动画技术尝试完全不同的方法,但我无法相信这是不可能的。
是否可以通过编程方式更改动画实例的 "x-delta"?
您可以在 xml 中使用可选的 %p 来控制相对于父尺寸的移动量。喜欢:
android:fromXDelta="-5%p"
android:toXDelta="5%p"
假设我们想要一个水平 "shakes" 视图的动画。
我们这样做:
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中定义的"shake distance"是dp/pixels中解释的静态距离,因此将在不同的设备上会有所不同——在高分辨率设备上,运动会很微妙……就像电动牙刷一样,但在低分辨率设备上,运动会很剧烈,就像在旧车场里挥舞着的充气娃娃一样。
最好将 "x-delta" 表示为视图宽度的比率:
float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();
但是......为了做到这一点,我们必须能够在代码中设置 "x-delta"......但我看不出这样做的方式。
我尝试输入 "animShake." -- "dot" -- 并查看可用选项...虽然有一些设置器,但其中 none 似乎允许设置 "x-delta." 我想我应该放弃并使用其他动画技术尝试完全不同的方法,但我无法相信这是不可能的。
是否可以通过编程方式更改动画实例的 "x-delta"?
您可以在 xml 中使用可选的 %p 来控制相对于父尺寸的移动量。喜欢:
android:fromXDelta="-5%p"
android:toXDelta="5%p"