VectorDrawableCompat和Canvas旋转,drawable消失在90/270度

时间:2016-03-13 14:22:35

标签: android android-vectordrawable

我正在尝试使用矢量drawables绘制到画布中。一切都很好,花花公子,直到我将画布对象旋转90度或270度。更接近我达到90或270度,画布中显示的可绘制更加模糊。最后在90或270度,画布上的矢量绘图完全消失。是否有某种修复或解决方法?或者我应该使用svg与其他库一起绘制画布?谢谢!

以下是代码:

public class CanvasView extends View {

private static final String TAG = "CanvasView";

private VectorDrawableCompat vectorDrawableCompat;
private int angle;

public CanvasView(Context context) {
    super(context);
    init();
}

public CanvasView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public CanvasView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

private void init(){
    vectorDrawableCompat = VectorDrawableCompat.create(getResources(),
            R.drawable.ic_android_black_24dp, null);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    vectorDrawableCompat.setBounds((getWidth()/2) - 50, (getHeight()/2) - 50, (getWidth()/2) + 50, (getHeight()/2) + 50);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.save();
    canvas.rotate(angle, getWidth()/2, getHeight()/2);
    vectorDrawableCompat.draw(canvas);
    canvas.restore();
}

public void setAngle(int angle){
    Log.i(TAG, "setAngle: " + angle);
    this.angle = angle;
    invalidate();
}
}

这是项目:https://github.com/danskiess/VectorTest

1 个答案:

答案 0 :(得分:1)

这已在android框架中修复。 https://code.google.com/p/android/issues/detail?id=192413

这种旋转情况的一种可能的解决方法是将VectorDrawable绘制到位图中,然后旋转位图。