VectorDrawableCompat 和 Canvas 旋转,drawable 在 90/270 度时消失
VectorDrawableCompat and Canvas rotate, drawable disappears at 90/270 degrees
我正在尝试使用矢量绘图绘制 canvas。在我将 canvas 对象旋转 90 或 270 度之前,一切都很好。我越接近 90 或 270 度,canvas 中显示的可绘制对象就会变得更加模糊。最后在 90 或 270 度时,canvas 上的可绘制矢量完全消失。是否有某种修复或解决方法?或者我应该用 svg 和其他一些库来绘制 canvas 吗?谢谢!
代码如下:
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();
}
}
这已在 android 框架中修复。
https://code.google.com/p/android/issues/detail?id=192413
对于这种旋转情况,一种可能的解决方法是将 VectorDrawable 绘制到位图中,然后旋转位图。
我正在尝试使用矢量绘图绘制 canvas。在我将 canvas 对象旋转 90 或 270 度之前,一切都很好。我越接近 90 或 270 度,canvas 中显示的可绘制对象就会变得更加模糊。最后在 90 或 270 度时,canvas 上的可绘制矢量完全消失。是否有某种修复或解决方法?或者我应该用 svg 和其他一些库来绘制 canvas 吗?谢谢!
代码如下:
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();
}
}
这已在 android 框架中修复。 https://code.google.com/p/android/issues/detail?id=192413
对于这种旋转情况,一种可能的解决方法是将 VectorDrawable 绘制到位图中,然后旋转位图。