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

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

我们做这样的事情:

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"
上一篇:android – 如何在摇动设备时刷新应用程序?


下一篇:使用 redis-shake 迁移 redis-cluster集群