Faire une notification Large Icon Round

Je souhaite afficher un avatar circulaire à partir des contacts de l'utilisateur en tant que grande icône de la notification – comme lors de la réception d'un texte ou d'un courrier. Lorsque je définis la grande icône comme image de ce contact, il en résulte une icône carrée.

Je cherche à transformer quelque chose qui ressemble à l'icône supérieure (l'avatar carré), ressemble à la grande icône de la notification par courrier électronique (l'avatar rond):

  • Pourquoi les noms de fichiers ne peuvent-ils pas contenir des caractères spéciaux ou commencer par une lettre majuscule?
  • Exécutez l'application en mode Paysage uniquement?
  • Configuration d'Ormlite sans utiliser les activités de base
  • AlertDialog avec EditText, ouvrez le clavier doux automatiquement avec l'accent sur EditText ne fonctionne pas
  • Les dépendances circulaires ne peuvent pas exister dans RelativeLayout, Android?
  • Pourquoi utiliser Handler?
  • Entrez la description de l'image ici

    Comment le faire tourner?

  • SetBackground vs setBackgroundDrawable (Android)
  • Plus d'explications sur IntentService
  • Fond de sélecteur par défaut dans les vues cliquables
  • Comment enregistrer la classe d'application dans mon fichier manifeste
  • Inclure les dépendances de maven dans eclipse "Exécuter comme -> application Android" build
  • Un moyen facile d'authentifier les demandes POST d'un client Google Android vers Google App Engine?
  • 3 Solutions collect form web for “Faire une notification Large Icon Round”

    Puisque setLargeIcon() accepte un Bitmap , il vous suffit de créer un Bitmap circulaire à partir de la source.

    Voici le code de Créer un bitmap cercle dans Android (je ne l'ai pas essayé).

     private Bitmap getCircleBitmap(Bitmap bitmap) { final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(output); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); return output; } 

    La réponse d'Egor a bien fonctionné. L'affichage du code ici sous le lien disparaît:

     private Bitmap getCircleBitmap(Bitmap bitmap) { final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(output); final int color = Color.RED; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); return output; } 

    La réponse acceptée requiert que le bitmap d'entrée soit un carré parfait (même hauteur et largeur). Si votre bitmap est en forme de rectangle, il renverra un ovale. J'ai modifié le code pour accepter des bitmaps en forme de formulaire et des cercles de retour centrés au milieu du bitmap d'entrée.

     public static Bitmap getCircleBitmap(Bitmap bitmap) { Bitmap output; Rect srcRect, dstRect; float r; final int width = bitmap.getWidth(); final int height = bitmap.getHeight(); if (width > height){ output = Bitmap.createBitmap(height, height, Bitmap.Config.ARGB_8888); int left = (width - height) / 2; int right = left + height; srcRect = new Rect(left, 0, right, height); dstRect = new Rect(0, 0, height, height); r = height / 2; }else{ output = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); int top = (height - width)/2; int bottom = top + width; srcRect = new Rect(0, top, width, bottom); dstRect = new Rect(0, 0, width, width); r = width / 2; } Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawCircle(r, r, r, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, srcRect, dstRect, paint); bitmap.recycle(); return output; } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.