Android Conseils de performance CustomView


Exemple

Ne pas allouer de nouveaux objets dans onDraw

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint(); //Do not allocate here
}

Au lieu de dessiner des tirables en toile ...

drawable.setBounds(boundsRect);

drawable.draw(canvas);

Utilisez un bitmap pour un dessin plus rapide:

canvas.drawBitmap(bitmap, srcRect, boundsRect, paint);

Ne redessinez pas la vue entière pour ne mettre à jour qu'une petite partie. Au lieu de cela, redessinez la partie spécifique de la vue.

invalidate(boundToBeRefreshed);

Si votre vue effectue une animation continue, par exemple une montre montrant chaque seconde, arrêtez au moins l'animation à onStop() de l'activité et redémarrez-la sur onStart() de l'activité.

Ne faites aucun calcul dans la méthode onDraw d'une vue, vous devriez plutôt terminer de dessiner avant d'appeler invalidate() . En utilisant cette technique, vous pouvez éviter de laisser tomber des images dans votre vue.

Rotations

Les opérations de base d'une vue sont translater, faire pivoter, etc. Presque tous les développeurs ont rencontré ce problème lorsqu'ils utilisent des bitmap ou des dégradés dans leur vue personnalisée. Si la vue affiche une vue pivotée et que le bitmap doit être pivoté dans cette vue personnalisée, beaucoup d’entre nous penseront que cela va coûter cher. Beaucoup pensent que tourner un bitmap est très coûteux car pour ce faire, vous devez traduire la matrice de pixels du bitmap. Mais la vérité est que ce n'est pas si difficile! Au lieu de faire pivoter le bitmap, faites simplement pivoter la toile elle-même!

// Save the canvas state
int save = canvas.save();
// Rotate the canvas by providing the  center point as pivot and angle
canvas.rotate(pivotX, pivotY, angle);
// Draw whatever you want
// Basically whatever you draw here will be drawn as per the angle you rotated the canvas
canvas.drawBitmap(...);
// Now restore your your canvas to its original state
canvas.restore(save);
// Unless canvas is restored to its original state, further draw will also be rotated.