2017-05-07 4 views
0

Ich habe eine Recycler-Ansicht mit Karten, die Bildansichten enthalten. Die Liste der Elemente besteht aus Rezepten. Daher versuche ich, das ImageView zur Laufzeit zu ändern und zu prüfen, ob es einen Zeichensatz gibt, der dem Namen des Rezepts entspricht (ich habe kein Bild für alle Rezepte im Zeichnungsordner). Wenn es nicht existiert, stelle ich ein generisches Bild ein. Dies verursacht Lags beim Scrollen der Recycler-Ansicht und manchmal stürzt es ab, wenn ich versuche, die Zurück-Taste zu drücken. Wie kann ich es glatter machen?Verzögerung beim Ändern der Bildansicht basierend auf dem Namen des Elements in der Recycler-Ansicht

Dies ist mein Code (RecyclerViewAdapter):

int test = ctx.getResources().getIdentifier(recipeName, "drawable", ctx.getPackageName()); 

    if(test != 0){ 
     imageView.setImageResource(test); 
    } 
    else{ 
     switch(item.getType()){ 
      case "Colazione": 
       imageView.setImageResource(R.drawable.colazione); 
       break; 
      case "Pranzo": 
       imageView.setImageResource(R.drawable.pranzo); 
       break; 
      case "Spuntino": 
       imageView.setImageResource(R.drawable.snack); 
       break; 
      case "Cena": 
       imageView.setImageResource(R.drawable.cena); 
       break; 
      case "Dessert": 
       imageView.setImageResource(R.drawable.dessert); 
       break; 
      case "Aperitivo": 
       imageView.setImageResource(R.drawable.brunch); 
       break; 

     } 

, wenn es zum Absturz bringen es diese Ausnahme startet:

java.lang.OutOfMemoryError: Failed to allocate a 83574412 byte allocation with 16777216 free bytes and 42MB until OOM 
+0

bitte Ihre Crash-Protokolle hinzufügen. –

+0

Wenn es ein Speicherproblem ist, könnten Sie vielleicht eine Bibliothek wie Fresco, Glide, Picasso usw. versuchen. – Vinnie

+0

Ich habe versucht Glide ma es hat das Problem nicht gelöst –

Antwort

0

Wenn Ihr alle in Standard ziehbar Ordner Drawables, der Größe verändert und setzen in aufklappbare Verzeichnisse mit den dpi-Qualifizierern:

  • ziehbar-MDPI
  • ziehbar-hdpi
  • ziehbar-xhdpi
  • ziehbar-xxhdpi
  • ziehbar-xxxhdpi

Andernfalls können Sie Speicherfehler für die Skalierung Prozesse erhalten. Vermeiden Sie es, Bilder mit sehr hoher Auflösung zu verwenden. Zum Beispiel, wenn Sie Bilder zeigen nur 100dp Breite, verwenden Sie nicht höher als 300px für xxhdpi Geräte. (1 dp = 3px für xxhdpi Dichte)

standardmäßig Android skaliert Bitmap Drawables (.png, .jpg, .gif-Dateien) und Nine-Patch-Zeichen (.9.png-Dateien), so dass sie auf jedem Gerät mit der entsprechenden physischen Größe wiedergegeben werden. Wenn Ihre Anwendung z. B. Bitmap-Zeichen nur für die Grundlinie mittlere Bildschirmdichte (mdpi) bereitstellt, skaliert das System sie auf einem Bildschirm mit hoher Dichte und skaliert sie auf einem Bildschirm mit niedriger Dichte. Diese Skalierung kann Artefakte in den Bitmaps verursachen. Um sicherzustellen, dass Ihre Bitmaps optimal aussehen, sollten Sie alternative Versionen mit unterschiedlichen Auflösungen für unterschiedliche Bildschirmdichten hinzufügen.

Source

+0

Welche Größe sollte ich für mdpi, hdpi, etc wählen? –

Verwandte Themen