我有一个矢量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
参数,而不是旋转画布?
非常感谢!
答案 0 :(得分:1)
你做不到。无法动态更改XML源定义。 AnimatedVectorDrawable
可以有效地更改android:rotation
参数,但仅限于预设值,而不是以编程方式。
另一种解决方案是在绘制时旋转Canvas
,就像你现在一样。
或者将VectorDrawable
包裹在RotateDrawable
中并改为绘制。
或setRotation
整个视图。