5

ベクター ドローアブルを使用してキャンバスに描画しようとしています。キャンバス オブジェクトを 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

4

1 に答える 1

1

これは、Android フレームワークで修正されています。 https://code.google.com/p/android/issues/detail?id=192413

この回転の場合の回避策の 1 つは、VectorDrawable をビットマップに描画してから、ビットマップを回転させることです。

于 2016-03-25T22:17:29.630 に答える