如何以编程方式更改动画实例的“x-delta”?

3
假设我们想要一个能够水平“抖动”视图的动画。
我们可以这样写:
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”?


1
你不能使用类似 android:toXDelta="5%p"/android:fromXDelta="-5%p" 这样的东西来使得在不同屏幕尺寸之间更加统一吗? - Worthless
那就是答案!你应该把它放进去,我会授予你奖励! - Nerdy Bunz
1个回答

3
您可以在xml中使用可选的%p来控制相对于父级大小的移动量。例如:
android:fromXDelta="-5%p"
android:toXDelta="5%p"

1
对我来说,我只是做了5%而已,没有使用'p'...但是我完全不知道你可以在xml中这样定义百分比,所以谢谢! - Nerdy Bunz
1
@BooberBunz 是的,% 基于基础大小 - %p 基于某个父容器。 - Worthless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接