2016-07-20 11 views
-1

Ich habe andere ähnliche Beiträge gesehen, die mein Problem nicht gelöst haben, weil die Auflösungen meiner Bilder sind klein (siehe unten) im Vergleich zu ihnen. Ich möchte eine Aktivität, in der ich Bildansichten auflisten möchte, als wäre es eine Listenansicht. Aber da ich nicht verstanden habe, wie man es in Listview macht, habe ich beschlossen, es mit Gridview und einem Element pro Spalte zu machen. Hier ist mein Code - es ist vor allem aus dem Beispiel developer.android.com kopiert gibt uns, mit der Ausnahme, dass ich die Breite meines Raster auf die Breite des Bildschirms strecken:Aktivität mit wenigen Bildern funktioniert langsam auf Handys

public class ImageAdap extends BaseAdapter { 
private Context mContext; 

private int widthDisplay; 

public ImageAdap(Context c, int width) { //int width is the width of the display in pixel 
    mContext = c; 
    widthDisplay = width; 
} 

public int getCount() { 
    return mThumbIds.length; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 

    int height = widthDisplay * 3/4; 

    if (convertView == null) { 
     // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(widthDisplay, height)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageResource(mThumbIds[position]); 
    return imageView; 
} 

// references to our images 
private Integer[] mThumbIds = { 
     R.drawable.sampleda_01, 
     R.drawable.sampleda_02, 
     R.drawable.sampleda_03, 
     R.drawable.sampleda_04 
}; } 

Der Code funktioniert flüssig auf meine 8' Tablette (Ich habe auch auf 10 'virtuelles Gerät getestet und es hat auch gut funktioniert). Aber auf zwei verschiedenen Telefonen und auf zwei virtuellen Geräten von ~ 5 Zoll lag es wie eine Hölle.

Meine Bilder haben eine Auflösung von 800x640. Ich habe auch auf 600x480 getestet (die Qualität der Bilder ist auch am schlechtesten mit je 90kb) -> das gleiche Ergebnis. Es scheint, dass die Auflösung der Bilder für mein Problem keine Rolle spielt. Aber es funktioniert gut mit Tablets: Mein Tablet ist alt im Vergleich zu einem Telefon, auf dem ich getestet habe, daher sollte die verwendete Hardware auch nicht die Ursache des Problems sein.

Ich entwarf die App in 4.1 und getestet auf 4.4 und 6.0 auf virtuellen Geräten und auf 5.0 und weiß nicht, welche Version mit Telefonen -> Die API sollte auch nicht das Problem sein.

Haben Sie eine Idee?

Antwort

1

Versuchen Sie, ViewHolder-Muster zu implementieren. Das muss die Produktivität steigern. Hier ist ein schönes Beispiel dafür, wie das zu tun: click

Und warum tut Ihr ‚getItem()‘ Methode return ‚null‘?

+0

Ich beobachte ein Tutorial darüber, werde es danach testen und so schnell wie möglich antworten. – calumon

+0

danke für den link. über getItem() weiß ich nicht und auch keine Ahnung, wofür es ist. Aber ich habe ein Problem mit ViewHolder für diese Zeile: imageView.setImageResource (mThumbIds [Position]); – calumon

+1

@calumon die Methode getItem() ist so, dass Sie in getView() nicht direkt in ein Array oder eine Sammlung aufrufen müssen. Die Idee ist, dass Sie stattdessen haben @DrawableRes public int getItem (int Position) { Rückgabe mThumbIds [Position]; } oder etwas in dieser Richtung. – Cliabhach

1

Ich hatte das Speichern Problem, und ich füge android:largeHeap="true" in meinem AndroidManifest.xml hinzu und dann funktioniert es besser. aber ich bin mir nicht sicher, ob der gleiche Grund das Problem verursacht

+0

Ich habe es gerade versucht, aber es hat nicht geholfen. Trotzdem, danke – calumon