universal image loader-Anzeige von Bildern von SD-Karte
mein Ziel ist die Anzeige der Bilder(thumbnails) von der SD-Karte in glatten Liste, die ich bearbeitet habe, die demo-Beispiel(das laden von Bildern aus dem web zu gridview) ein bisschen zum laden der Bilder von der SD-Karte zu sehen, die Leistung , und wenn die Bilder nicht zwischengespeichert (zum ersten mal), es ist ziemlich langsam, da sollte das laden der Bilder von der lokalen SD-Karte nicht im web, aber nach dem die Bilder zwischengespeichert werden iam ziemlich glücklich mit den Ergebnissen,bitte werfen Sie einen Blick und lassen Sie mich wissen, wenn iam etwas falsch zu machen, oder wie kann ich die Leistung auf den ersten laden, auch iam öffnen, die für andere Bibliotheken, die vielleicht auch mehr spezialisiert auf das laden von Bildern, form SD-Karte,hier ist der code :-
public class ImageGridActivity extends AbsListViewBaseActivity {
//get files path in camera folder
public String[] getimages() {
String[] images=new String[175];
String path="file:///mnt/sdcard/DCIM/Camera/";
int counter=0;
String name;
File sdCardRoot = Environment.getExternalStorageDirectory();
File yourDir = new File(sdCardRoot, "dcim/camera");
for (File f : yourDir.listFiles()) {
if (f.isFile()){
name = path + f.getName().toString() ;
images[counter]=name;
//make something with the name
counter++;}
}
return images;
}
String[] imageUrls= getimages();
DisplayImageOptions options;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_image_grid);
Bundle bundle = getIntent().getExtras();
// imageUrls = bundle.getStringArray(Extra.IMAGES);
// imageUrls[0]="file:///mnt/sdcard/DCIM/Camera/abc.jpg";
options = new DisplayImageOptions.Builder()
/* .showStubImage(R.drawable.ic_stub)
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build(); */
.showStubImage(R.drawable.ic_stub)
.showImageForEmptyUri(R.drawable.ic_empty)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.showImageOnFail(R.drawable.ic_launcher).cacheInMemory()
.cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext()).discCacheExtraOptions(720 , 1280 , CompressFormat.PNG, 0, null).build();
ImageLoader.getInstance().init(config);
listView = (GridView) findViewById(R.id.gridview);
((GridView) listView).setAdapter(new ImageAdapter());
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startImagePagerActivity(position);
}
});
}
private void startImagePagerActivity(int position) {
Intent intent = new Intent(this, ImagePagerActivity.class);
intent.putExtra(Extra.IMAGES, imageUrls);
intent.putExtra(Extra.IMAGE_POSITION, position);
startActivity(intent);
}
public class ImageAdapter extends BaseAdapter {
@Override
public int getCount() {
return imageUrls.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ImageView imageView;
if (convertView == null) {
imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
} else {
imageView = (ImageView) convertView;
}
imageLoader.displayImage(imageUrls[position], imageView, options);
return imageView;
}
}
}
item_grid_image
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="120dip"
android:adjustViewBounds="true"
android:contentDescription="@string/descr_image"
android:scaleType="centerCrop" />
vielen Dank im Voraus,
- zeigen Sie uns
item_grid_image
code und verwenden Sie keine hartcodierten Pfade. - Hinzugefügt item_grid_image
- auch können Sie bitte erklären, was meinst du "nicht verwenden einprogrammierte Pfade."
String path="file:///mnt/sdcard/DCIM/Camera/"
dies ist hardcoded Pfad. verwendenEnvironment.getExternalStorageDirectory()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Sache ist, dass ich Sie nicht initialisieren die image loader jedes mal, wenn ich passieren
onCreate
Ihrer Tätigkeit. Im Grunde benötigen Sie nicht mehr als eine Initialisierung, so schlage ich vor, initialisieren Sie es in IhremApplication
onCreate
. Ich weiß nicht, wie die Bild-loader wird es sich Verhalten, wenn Sie neu initialisieren, nachdem Sie es bereits begonnen, das herunterladen einige Bilder.Abgesehen davon, dass das, was Sie tun, scheint ein bisschen komisch für mich - schon haben Sie die Bilder auf Ihrem Handy, aber Sie geben das image loader die Aufgabe, Sie zu nehmen und speichern Sie Sie einmal mehr so, dass es Ihnen zwischengespeichert. Ich denke, dass dieser parameter für Ihre Konfiguration unechte:
.cacheOnDisc()
versuchen Sie dabei, ohne es und sehen, ob Sie schneller zu entfernen (es wird halt UIL tun doppelte auf SD-Karte)