Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用动画矢量绘图工具制作Android机器人波浪_Android_Android Animation_Android Drawable_Android Vectordrawable - Fatal编程技术网

使用动画矢量绘图工具制作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>
...