web-dev-qa-db-ja.com

APIレベル28でCanvas変数が見つかりません

次のCanvas変数はAndroid 28。

canvas.saveLayer(0, 0, getWidth(), getHeight(), null,
                Canvas.MATRIX_SAVE_FLAG |
                        Canvas.CLIP_SAVE_FLAG |
                        Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
                        Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
                        Canvas.CLIP_TO_LAYER_SAVE_FLAG);
16
Girish Bhutiya

これらのフラグはAPI 28で削除されました。 こちら を参照してください:

クラスAndroid.graphics.Canvas

削除されたメソッドint save(int)

削除されたフィールドint CLIP_SAVE_FLAG
int CLIP_TO_LAYER_SAVE_FLAG
int FULL_COLOR_LAYER_SAVE_FLAG
int HAS_ALPHA_LAYER_SAVE_FLAG
int MATRIX_SAVE_FLAG

このメソッドはAPI 26で廃止されました。 ここ を参照してください:

このメソッドは、APIレベル26で廃止されました。代わりに、saveLayer(float、float、float、float、Paint)を使用してください。

代わりに使用するもの

API 28のCanvasソースコードによると、使用するすべてのフラグは_ALL_SAVE_FLAG_の値と等しくなるように結合されます。

_public  static  final  int ALL_SAVE_FLAG =  0x1F;
public  static  final  int MATRIX_SAVE_FLAG =  0x01;
public  static  final  int CLIP_SAVE_FLAG =  0x02;
public  static  final  int HAS_ALPHA_LAYER_SAVE_FLAG =  0x04;
public  static  final  int FULL_COLOR_LAYER_SAVE_FLAG =  0x08;
public  static  final  int CLIP_TO_LAYER_SAVE_FLAG =  0x10;
_

同じ ソースコード からのCanvas#saveLayer(left, top, right, bottom, Paint)の呼び出しは、デフォルトで_ALL_SAVE_FLAG_を使用します。

_/**  
 * Convenience for {@link #saveLayer(RectF, Paint)} that takes the four float coordinates of the  
 * bounds rectangle. */
public int saveLayer(float left, float top, float right, float bottom, @Nullable Paint paint) {  
    return saveLayer(left, top, right, bottom, Paint, ALL_SAVE_FLAG);  
}
_

したがって、あなたのコードは次のコードと同等であるように見えます。

_canvas.saveLayer(0, 0, getWidth(), getHeight(), null);
_

このバージョンのsaveLayer()は、API 21以降でのみ使用できます。より低いAPIレベルをサポートするには、

_canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
_

ここで、_Canvas.ALL_SAVE_FLAG_は、上記のor'ed値と同じです。

19
Cheticamp

canvas.save();を使用できます。 canvas.save(Canvas.MATRIX_SAVE_FLAG | CLIP_SAVE_FLAG)の代わりに参照

1
Abdur Rehman