2016-05-04 44 views
2

我有一个矢量绘制,我想根据我的应用程序中的一些输入旋转。如何以编程方式设置Vector 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(); 

我怎样才能,而不是旋转画布,以改变我的vector_drawable.xml rotation_group里面android:rotation参数?

非常感谢!

回答

0

你不能。无法即时更改XML源定义。 AnimatedVectorDrawable可以有效地改变参数android:rotation,但只能看到预定义的值,而不是编程。

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

或者可能将您的VectorDrawable包装在RotateDrawable中,然后进行绘制。

setRotation上的整体看法。

相关问题