2016-07-26 16 views
0

Ich mache einen neuen Beitrag, weil ich nicht weiß, wie ich das Problem, das ich habe, zu lösen. Ich habe viele Beiträge gelesen, aber ich habe keine richtige Lösung gefunden. Ich habe nur einen ImageButton und erhalte einen Fehler "Überspringe 66 Frames! Die Anwendung ...". Ich habe von AsyncTask gehört, aber ich weiß nicht, wie ich es verwenden soll, deshalb schreibe ich diesen Beitrag. Ich habe AsyncTask-Lösungen gesehen, aber nicht für ImageButton, daher möchte ich ein Beispiel für ImageButton erhalten, um meine Probleme für meine App zu lösen. Vielen Dank.ImageButton-Probleme. 35 Frames übersprungen! Die Anwendung möglicherweise zu viel Arbeit auf seinem Hauptthread

public class MainActivity erweitert AppCompatActivity {

ImageButton info; 
Button playButton; 
TextView title; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //FULLSCREEN 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.activity_main); 

    info = (ImageButton) findViewById(R.id.info); 
    info.setBackgroundResource(R.drawable.info); 
} 

}

+1

Was ist die Größe von "Info" Bild in Pixel? – Ozgur

+0

Die Größe ist 500x500 – ElNiinjos

Antwort

-1

Sie können Bibliotheken von Drittanbietern verwenden, um große Bilder in Ihre Ansichten Cache und laden und es nicht auf dem Haupt-Thread zu tun. Forschung Glide, Picasso und dergleichen. Zum Beispiel mit Glide können Sie Bilder asynchron wie folgt laden:

Glide.with(this).load(imagePath).asBitmap().into(new SimpleTarget<Bitmap>(viewWidth, viewHeight) { 
        @Override 
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
         Drawable drawable = new BitmapDrawable(resource); 
          yourImageButton.setBackground(drawable); 
        } 
}); 
+0

Ich habe alle Bilder auf die Größe 500x500 verkleinert, nur wegen dieses Problems, aber ich werde es versuchen, danke. – ElNiinjos

+0

@ElNiinjos das ist wahrscheinlich die bessere Lösung, wenn Sie sich nicht um die Größe kümmern müssen. Wenn Sie jedoch eine größere Zeichenfläche beibehalten möchten, um größere Bildschirmgrößen zu unterstützen, müssen Sie entweder alle Zeichen manuell erstellen oder die Größe ändern, indem Sie die obige Methode verwenden. – SoroushA

+0

Ist es besser, dies mit Objekt oder einer anderen Methode zu tun in der Hauptklasse? Ich habe versucht, den Bildknopf in einer anderen Klasse zu initialisieren und zurückzugeben, aber ich habe das Problem nicht behoben. – ElNiinjos

0

zu tun dies auf UI-Thread zu vermeiden, könnten Sie die Hintergrund-Ressource in activity_main.xml gesetzt. so etwas wie diese:

<ImageButton 
     android:id="@+id/info" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/info" /> 
+0

das wird nicht helfen. Ladequellen werden immer noch auf dem UI-Thread passieren – SoroushA

+0

Ich habe das schon einmal versucht, aber es ist das gleiche. Das Hauptproblem, das ich habe, ist, dass ich an der App arbeite mit 35 Dateien in Zeichen und für jeden Klick auf die Schaltfläche, das Bild ändern, so dass ich 400 bis 600 übersprungene Frames und auf meinem Handy funktioniert nicht normal. – ElNiinjos

+1

@ElNiinjos Wenn Sie 35 Bilder zum Laden haben, müssen Sie diese unbedingt asynchron erstellen. Glide oder Picasso sind deine besten Wetten – SoroushA

0

Sie sollten die Dimension Ihres „R.drawable.info“ Bild überprüfen und ändern.

+0

Ich habe es bereits auf 500x500 skaliert. – ElNiinjos