如何以编程方式更改动画实例的“x-delta”?
Posted
技术标签:
【中文标题】如何以编程方式更改动画实例的“x-delta”?【英文标题】:How to programatically alter "x-delta" of an Animation instance? 【发布时间】:2018-08-06 07:26:43 【问题描述】:假设我们想要一个水平“摇动”视图的动画。
我们这样做:
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 解释的静态距离,因此在不同的设备上会有所不同——高分辨率设备,运动会很微妙……就像电动牙刷一样,但在低分辨率设备上,运动会像二手车场中的一个吹气球一样剧烈。
最好将“x-delta”表示为视图宽度的比率:
float ratio = 14f/392f;
float valueOfXTranslation = ratio*v.getWidth();
但是...为了做到这一点,我们必须能够在代码中设置“x-delta”...我认为没有办法这样做。
我尝试输入“animShake”。 -- "dot" -- 查看可用的选项......虽然有一些设置器,但似乎没有一个允许设置“x-delta”。我想我应该放弃并使用其他动画技术尝试完全不同的方法,但我简直不敢相信这是不可能的。
是否可以以编程方式更改动画实例的“x-delta”?
【问题讨论】:
你不能使用 android:toXDelta="5%p"/android:fromXDelta="-5%p" 之类的东西来使它在屏幕尺寸之间更加统一吗? 这就是答案!你应该把它放进去,我会奖励你的! 【参考方案1】:您可以在 xml 中使用可选的 %p 来控制相对于父大小的移动量。喜欢:
android:fromXDelta="-5%p"
android:toXDelta="5%p"
【讨论】:
对我来说,我只做了 5% 没有 'p' ...但我完全不知道您可以像这样在 xml 中定义百分比,所以谢谢!。 @BooberBunz 是的,% 基于基本大小 - %p 在某些父容器上。以上是关于如何以编程方式更改动画实例的“x-delta”?的主要内容,如果未能解决你的问题,请参考以下文章
如果约束是使用 VFL 以编程方式创建的,如何为约束更改设置动画?