如何以编程方式设置Vector Drawable的组参数?

时间:2016-05-04 09:28:08

标签: java android xml animation android-vectordrawable

我有一个矢量drawable,我想根据我的应用程序中的一些输入旋转。

我有一个vector_drawable.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="100dp"
    android:height="100dp"
    android:viewportWidth="100"
    android:viewportHeight="100">

    <group
      android:name="rotation_group"
      android:pivotX="50"
      android:pivotY="50"
      android:rotation="180" >
      <path
          android:pathData="..."
          android:fillColor="#ffffff"/>
      <path
          android:pathData="..."
          android:fillColor="#ffffff"/>
    </group>

    <path
        android:pathData="..."
        android:fillColor="#242424"/>
</vector>

在我的代码中,我创建了一个ValueAnimator

ValueAnimator animator = ObjectAnimator.ofInt(myDrawable, "rotate", 0, 360);
animator.setDuration(500);
animator.addUpdateListener(animatorUpdateListener);
animator.start();

animatorUpdateListener的定义如下:

animatorUpdateListener = new AnimatorUpdateListener() {
  @Override
  public void onAnimationUpdate(ValueAnimator valueAnimator) {
    int angle = (int) valueAnimator.getAnimatedValue("rotate");
    myAngle = angle;
    myView.invalidate();
  }
};

在我的onDraw方法中,我然后调用

canvase.save(Canvas.MATRIX_SAVE_FLAG);
canvas.rotate(myAngle);
myDrawable.draw(canvas);
canvas.restore();

如何更改canvas_drawable.xml的android:rotation内的rotation_group参数,而不是旋转画布?

非常感谢!

1 个答案:

答案 0 :(得分:1)

你做不到。无法动态更改XML源定义。 AnimatedVectorDrawable可以有效地更改android:rotation参数,但仅限于预设值,而不是以编程方式。

另一种解决方案是在绘制时旋转Canvas,就像你现在一样。

或者将VectorDrawable包裹在RotateDrawable中并改为绘制。

setRotation整个视图。