假设我们想要一个可以水平“摇动”视图的动画。

我们做这样的事情:

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"

09-10 02:07
查看更多