Bonjour à tous,

J'ai dans mon appli une vue que je dessine dans ma méthode onDraw. Cette vue est amenée à être utilisée comme sous-vue de plusieurs vues, et sa taille pourra varier.

Mon soucis étant que, comme cela est recommandé, je cherche à éviter les allocations d'objets dans ma méthode onDraw.

Pour mes Path et Paint, aucun soucis, mais je bute concernant un dégradé. En fait, j'ai un dégradé dont les positions de départ et d'arrivée (x1, y1, x2 et y2 de la doc ci-dessous) sont proportionnelles à la taille de ma vue.

Doc : http://developer.android.com/referen...Gradient(float, float, float, float, int[], float[], android.graphics.Shader.TileMode)

Je souhaitais donc savoir si vous connaissiez un moyen de remplir un rectangle arrondi avec un dégradé à 135°, sans passer par l'appel du constructeur dans mon onDraw ?

Extrait de ma méthode onDraw actuelle :

Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
// Ces trois lignes sont faîtes pour dessiner ma vue dans le plus grand carré de l'espace qui lui est alloué
// Je donne toutes les dimensions relatives à un carré de 128x128 et en les multipliant par mon multiplicateur
// J'aurai les bonnes dimensions
float widthMultiplicator = ((float) this.getWidth())/128F;
float heightMultiplicator = ((float)this.getHeight())/128F;
 
this.multiplicator = Math.min(widthMultiplicator, heightMultiplicator);
 
// J'initialise mes couleurs
int[] colors = ...;
 
// Et leurs positions correspondantes
float[] positions = ...
 
// Le dégradé de mon rectangle arrondi
this.internalRoundSquareGradient = new LinearGradient(10.88F*this.multiplicator, 10.88F*this.multiplicator, 117.12F*this.multiplicator, 117.12F*this.multiplicator, colors, positions,Shader.TileMode.MIRROR);
 
// J'applique ce dégradé au Paint avec lequel je vais dessiner mon rectangle arrondi
this.internalRoundSquarePaint.setShader(this.internalRoundSquareGradient);

Merci