gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:15 25 4
gpt4 key购买 nike

假设我们想要一个水平“摇动” View 的动画。

我们做这样的事情:

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/pixels解释的静态距离,因此在不同的设备上会有所不同——在high在分辨率设备上,运动会很微妙……就像电动牙刷一样,但在低分辨率设备上,运动会很激烈,就像二手车场里挥舞着的充气娃娃。

将“x-delta”表示为 View 宽度的比率会好得多:

float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();

但是......为了做到这一点,我们必须能够在代码中设置“x-delta”......我认为没有办法做到这一点。

我试过输入“animShake”。 --“点”--并查看可用选项……虽然有一些 setter ,但它们似乎都不允许设置“x-delta”。我想我应该放弃并使用其他动画技术尝试完全不同的方法,但我无法相信这是不可能的。

是否可以通过编程方式更改动画实例的“x-delta”?

最佳答案

您可以在 xml 中使用可选的 %p 来控制相对于父尺寸的移动量。喜欢:

android:fromXDelta="-5%p"
android:toXDelta="5%p"

关于java - 如何以编程方式更改动画实例的 "x-delta"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51702520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com