2015-11-02 11 views
9

Ich versuche, die Palettenfunktion von Androids Material Design zu verwenden, aber ich habe einige Probleme bei der Anwendung.Android Apply Palette

Ich habe die Palette erfolgreich erzeugt und jetzt versuche ich, die Palette in eine Funktion zu übergeben, die es anwendet.

Das Problem, das ich habe, ist, dass, wenn ich die Palette an die applyPalette Funktion übergeben keine der Methoden wie palette.getDarkMutedColor().getRgb() , palette.getVibrantColor().getRgb() werden mit den Werten aus der Palette gefüllt.

Das Tutorial, das ich wurde nach nur knapp sein Ziel noch etwas anderes erwähnt dann in der Palette auf die Funktion übergeben und so die Methoden dabei ausgefüllt werden würde

Dies ist die Generator-Funktion ist und die Anwendung Funktion kann beliebige Sehen Sie, warum das nicht funktioniert?

-Code

private void colorize(Bitmap photo) { 
    Palette palette = new Palette.Builder(photo).generate(); 
    applyPalette(palette); 
} 

private void applyPalette(Palette palette) { 
    getWindow().setBackgroundDrawable(new ColorDrawable(palette.getDarkMutedColor().getRgb())); 

    TextView titleView = (TextView) findViewById(R.id.title); 
    titleView.setTextColor(palette.getVibrantColor().getRgb()); 

    TextView descriptionView = (TextView) findViewById(R.id.description); 
    descriptionView.setTextColor(palette.getLightVibrantColor().getRgb()); 

    colorRipple(R.id.info, palette.getDarkMutedColor().getRgb(), 
      palette.getDarkVibrantColor().getRgb()); 
    colorRipple(R.id.star, palette.getMutedColor().getRgb(), 
      palette.getVibrantColor().getRgb()); 

    View infoView = findViewById(R.id.information_container); 
    infoView.setBackgroundColor(palette.getLightMutedColor().getRgb()); 

    AnimatedPathView star = (AnimatedPathView) findViewById(R.id.star_container); 
    star.setFillColor(palette.getVibrantColor().getRgb()); 
    star.setStrokeColor(palette.getLightVibrantColor().getRgb()); 
} 
+0

versuchen Sie mit dem Entfernen der Funktion getRgb(). –

+0

Nein, das half nicht immer noch den gleichen Fehler haben – Hayes121

+0

Bitte klären Sie, was Sie meinen, wenn Sie sagen, die Farbfunktionen "nicht funktionieren". – stkent

Antwort

1

Verwendung picassopalette Dritte Bibliothek und es in Ihr Projekt importiert dann folgenden Code verwenden:

try { 
     ContextWrapper cw = new ContextWrapper(OtherUserProfileScreenActivity.this); 
     Picasso.with(this).load(image + ".jpg").placeholder(R.drawable.ic_loading).error(R.drawable.ic_error).into(imageView, PicassoPalette.with(Image + ".jpg", imageView).use(PicassoPalette.Profile.MUTED_DARK).intoCallBack(new BitmapPalette.CallBack() { 
      @Override 
      public void onPaletteLoaded(Palette palette) { 

       int mutedColor = palette.getMutedColor(R.attr.colorPrimary); 
       mCollapsingToolbarLayout.setContentScrimColor(mutedColor); 
      } 
     })); 
    } catch (OutOfMemoryError e) { 
     e.printStackTrace(); 
     System.gc(); 
    } 
+0

Danke für die Antwort, aber ich bin nicht auf der Suche nach einer Drittpartei Bibliothek – Hayes121

0

Sie in synchroner Weise versucht haben. Also ich denke unten Code löst Ihr Problem (auf asynchrone Weise).

private void colorize(Bitmap photo) { 
Palette.from(photo).generate(new Palette.PaletteAsyncListener() { 
      @Override 
      public void onGenerated(Palette palette) { 
       applyPalette(palette); 
      } 
     }); 
} 
+0

Vielen Dank für den Vorschlag, versuchte ich meinen Code mit Ihrem aber immer noch gleichen Fehler – Hayes121

0

Vom documentation, alle Anrufe, die Sie von Palette verwenden bereits einen RGB-Wert zurück, sondern erfordern eine Standardfarbe übergeben werden. Vielleicht wollten Sie stattdessen diejenigen verwenden, die ein Farbfeld zurückgeben? Zum Beispiel würden Sie statt palette.getVibrantColor().getRgb() stattdessen stattdessen palette.getVibrantSwatch().getRgb() tun. Ersetzen Sie alle Ihre erhalten Farbe Anrufe mit dem entsprechenden get Swatch() Anruf.

Stellen Sie außerdem sicher, dass Sie in Ihren Importen import android.support.v7.graphics.Palette haben und dass Sie compile 'com.android.support:palette-v7:22.1.0' in Ihre Abhängigkeiten einschließen. Version 22.1.0 ist das Minimum, da Sie Palette.Builder verwenden.

+0

Danke für den Vorschlag, aber ich hatte bereits diese enthalten und importiert – Hayes121

0

Der erste, was ich weiß nicht, warum Sie nicht Fehler haben, wenn Sie

palette.getVibrantColor().getRgb() 

schreiben Ich werde annehmen, dass Sie nicht Fehler haben, so können Sie die alte Bibliothek werden müssen. Wie im aktualisierten Format akzeptiert es einen Parameter als Standardfarbwert. Um RGB bessere Sache zu extrahieren ist Palette.Swatch Objekt zu bekommen und RGB-Werte zu erhalten. Ich habe eine kleine funktionierende einfache App erstellt, um zu demonstrieren, wie man die verbesserte Bibliothek verwendet. Sie können das überprüfen here. Hoffe das hilft.