使用动画矢量绘图工具制作Android机器人波浪
我正在尝试创建一个简单的机器人标志挥动动画。我的使用动画矢量绘图工具制作Android机器人波浪,android,android-animation,android-drawable,android-vectordrawable,Android,Android Animation,Android Drawable,Android Vectordrawable,我正在尝试创建一个简单的机器人标志挥动动画。我的VectorDrawable和AnimatedVectorDrawable定义如下: VectorDrawable(drawable/android.xml) AnimatedVectorDrawable(drawable/wave.xml) 那么我怎样才能让手臂向我挥手呢?如果你向Android挥手,也许它会向我挥手 然而,如果这不起作用,这里有一些方法 首先,拥有一个好的环境总是很有用的。从这里我们可以看到,android:rotati
VectorDrawable
和AnimatedVectorDrawable
定义如下:
VectorDrawable(drawable/android.xml)
AnimatedVectorDrawable(drawable/wave.xml)
那么我怎样才能让手臂向我挥手呢?如果你向Android挥手,也许它会向我挥手
然而,如果这不起作用,这里有一些方法
首先,拥有一个好的环境总是很有用的。从这里我们可以看到,android:rotation
是
标记的一个属性,因此当您将左臂包裹在
标记中时,您需要这样做
需要注意的其他属性有pivotX
和pivotY
。我再次看到pivotX
出现在您的问题中,但不是它应该出现的位置!组的轴心点确定图形的哪个部分是旋转的中心。所以,如果你考虑,例如,一个正方形。如果枢轴点在中心,想象一个销在中间,并围绕它旋转正方形。如果轴心点是左上角,想象一下将一根大头针插在该角上,并使整个正方形围绕被钉住的角旋转
在你的例子中,你可能想要计算出肩部中间的坐标,并将其设置为你的枢轴。你的轴心点保持在原来的位置;旋转会发生变化
所以你的矢量绘图部分看起来像这样:
...
<group
android:name="leftArmGroup"
android:pivotX= //the x and y coordinates of the shoulder
android:pivotY= //
android:rotation="0">
<path
android:name="leftArm"
android:fillColor="#ff0000"
android:pathData="M28,111L28,111A24,24 0,0 1,52 135L52,220A24,24 0,0 1,28 244L28,244A24,24 0,0 1,4 220L4,135A24,24 0,0 1,28 111z"
/>
</group>
...
。。。
...
您的动画向量现在需要以leftArmGroup
为目标,而不是leftArm
,并且您的objectAnimator将为android:propertyName=“rotation”
属性设置动画(以度为单位,例如0到360将是完全旋转)。我在上面的代码片段中包含的“rotation=0”部分在技术上不需要在那里(默认值为零),但是它很方便,因此您可以快速尝试不同的数字,并查看它在预览窗口中的外观
如果你想了解更多细节,请告诉我。如果你在Android上挥手,也许它会回击 然而,如果这不起作用,这里有一些方法 首先,拥有一个好的环境总是很有用的。从这里我们可以看到,
android:rotation
是
标记的一个属性,因此当您将左臂包裹在
标记中时,您需要这样做
需要注意的其他属性有pivotX
和pivotY
。我再次看到pivotX
出现在您的问题中,但不是它应该出现的位置!组的轴心点确定图形的哪个部分是旋转的中心。所以,如果你考虑,例如,一个正方形。如果枢轴点在中心,想象一个销在中间,并围绕它旋转正方形。如果轴心点是左上角,想象一下将一根大头针插在该角上,并使整个正方形围绕被钉住的角旋转
在你的例子中,你可能想要计算出肩部中间的坐标,并将其设置为你的枢轴。你的轴心点保持在原来的位置;旋转会发生变化
所以你的矢量绘图部分看起来像这样:
...
<group
android:name="leftArmGroup"
android:pivotX= //the x and y coordinates of the shoulder
android:pivotY= //
android:rotation="0">
<path
android:name="leftArm"
android:fillColor="#ff0000"
android:pathData="M28,111L28,111A24,24 0,0 1,52 135L52,220A24,24 0,0 1,28 244L28,244A24,24 0,0 1,4 220L4,135A24,24 0,0 1,28 111z"
/>
</group>
...
。。。
...
您的动画向量现在需要以leftArmGroup
为目标,而不是leftArm
,并且您的objectAnimator将为android:propertyName=“rotation”属性设置动画(以度为单位,例如0到360将是完全旋转)。我在上面的代码片段中包含的“rotation=0”部分在技术上不需要在那里(默认值为零),但是它很方便,因此您可以快速尝试不同的数字,并查看它在预览窗口中的外观
如果您想了解更多细节,请告诉我。好的,很好,知道我走的是正确的道路。我将讨论您提到的属性并报告。另一个简单的问题是,有没有一种简单的方法来确定正确的轴x/y坐标?还是仅仅是尝试和错误?不知道是否有一个简单的方法(除非你自己画,你的图形包可能会显示坐标)。我不是在电脑前检查,但从它看,我猜x28,y135是的,我意识到第一个svg m命令指定了起点,所以周围的任何东西似乎都可以正常工作。我现在的问题是手臂似乎被切断了……我试着同时调整android:width和viewportWidth,但都没有效果:啊,是的,右侧增加了宽度,所以如果是另一只手臂的话就可以了!在这种情况下,您可以添加android:width和viewportWidth,然后将整个android移动到右侧。要做到这一点,请将整个android放在一个
标记中,并使用“android:translateX”属性将组移动到右侧。好吧,很酷,很高兴知道我走的是正确的道路。我将讨论您提到的属性并报告。另一个简单的问题是,有没有一种简单的方法来确定正确的轴x/y坐标?还是仅仅是尝试和错误?不知道是否有一个简单的方法(除非你自己画,你的图形包可能会显示坐标)。我不是在电脑前检查,但从它看,我猜x28,y135是的,我意识到第一个svg m命令指定了起点,所以周围的任何东西似乎都可以正常工作。我现在的问题是手臂似乎被切断了……我试着同时调整android:width和viewportWidth,但都没有效果:啊,是的,右侧增加了宽度,所以如果是另一只手臂的话就可以了!在这种情况下,您可以添加android:width和viewportWidth,然后将整个android移动到右侧。为此,请将整个
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="4000"
android:repeatCount="1"
android:repeatMode="reverse"
android:propertyName="pivotX"
android:valueFrom="0.0"
android:valueTo="50.0"
/>
</set>
...
<group
android:name="leftArmGroup"
android:pivotX= //the x and y coordinates of the shoulder
android:pivotY= //
android:rotation="0">
<path
android:name="leftArm"
android:fillColor="#ff0000"
android:pathData="M28,111L28,111A24,24 0,0 1,52 135L52,220A24,24 0,0 1,28 244L28,244A24,24 0,0 1,4 220L4,135A24,24 0,0 1,28 111z"
/>
</group>
...