web-dev-qa-db-fra.com

Impossible de trouver les variables Canvas dans l'API niveau 28

Les variables Canvas suivantes sont introuvables dans 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

Ces indicateurs ont été supprimés dans l'API 28. Voir ici :

Classe Android.graphics.Canvas

Méthodes supprimées int save (int)

Champs supprimés 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

Cette méthode a été déconseillée dans l'API 26. Voir ici :

Cette méthode est déconseillée au niveau de l'API 26. Utilisez plutôt saveLayer (float, float, float, float, Paint).

Quoi utiliser à la place

Selon le code source Canvas pour l'API 28, les indicateurs que vous utilisez tous se combinent pour être égaux à la valeur de 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;

Du même code source l'appel à Canvas#saveLayer(left, top, right, bottom, Paint) utilise par défaut 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);  
}

Ainsi, il semble que votre code soit équivalent au code suivant que vous pouvez utiliser en remplacement:

canvas.saveLayer(0, 0, getWidth(), getHeight(), null);

Cette version de saveLayer () n'est disponible que sur l'API 21+. Pour prendre en charge des niveaux d'API inférieurs, utilisez

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

Canvas.ALL_SAVE_FLAG Est identique aux valeurs ou'ed ci-dessus.

19
Cheticamp

vous pouvez utiliser canvas.save (); au lieu de la référence canvas.save (Canvas.MATRIX_SAVE_FLAG | CLIP_SAVE_FLAG)

1
Abdur Rehman