Quiero implementar la misma función que podemos ver en WhatsApp, mientras veo el perfil de una persona, el color de la barra de estado cambia según el color de la imagen.

-2
TheSohan 10 may. 2019 a las 13:44

3 respuestas

La mejor respuesta

Se llama Pallete, usa la siguiente función, solo pasa tu imagen de mapa de bits

  private void setUpPalette(Bitmap bitmap) {
   // you passed your Bitmap image;
    Palette.from(bitmap).
            generate(new Palette.PaletteAsyncListener() {
                @Override
                public void onGenerated(Palette palette) {
                    if (palette != null) {

                       //default color is yellow
                       // set the color to toolbar, whatever
                        int extColor = palette.getVibrantColor(ContextCompat.getColor(MainActivity.this, R.color.yellow));
                         if (getWindow() != null) {
                                getWindow().setStatusBarColor(ContextCompat.getColor(this, extColor));
                                }
                    } else {
                         if (getWindow() != null) {
                                    getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.fail_safe));
                                                    }
                    }
                }
            });
}
1
notTdar 10 may. 2019 a las 12:24

Debe usar la Biblioteca de paletas para obtener el color dominante:

// Generate palette asynchronously and use it on a different
// thread using onGenerated()
public void changeStatusBarColorAsync(Bitmap bitmap) {
  Palette.from(bitmap).generate(new PaletteAsyncListener() {
    public void onGenerated(Palette p) {
      // Use generated instance
      Palette.Swatch vibrant = p.getVibrantSwatch();
      int color = ContextCompat.getColor(getContext(),R.color.default_title_background);
      if(vibrant != null){
        color = vibrantSwatch.getTitleTextColor();
      }
      getWindow().setStatusBarColor(ContextCompat.getColor(this, color));
    }


  });
}
1
FedeFonto 10 may. 2019 a las 12:03

https://stackoverflow.com/a/28145358/9186913 encontrará el color más vibrante en la imagen y podrá cambie getWindow (). setStatusBarColor (getResources (). getColor (R.color.color));

0
raj kavadia 10 may. 2019 a las 10:55