Не удается найти переменные Canvas в API Level 28 - PullRequest
0 голосов
/ 11 января 2019

Следующие 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);

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

вы можете использовать canvas.save (); вместо canvas.save (Canvas.MATRIX_SAVE_FLAG | CLIP_SAVE_FLAG) ссылка

0 голосов
/ 15 января 2019

Эти флаги были удалены в 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).

Что использовать вместо

Согласно исходному коду Canvas для API 28 все флаги, которые вы используете, объединяются, чтобы быть равными значению 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 соответствует значениям или , указанным выше.

...