0

JSON から画像を遅延ロードして Android GridView でプレビューするにはどうすればよいですか? 完全な例をいただければ幸いです。

4

3 に答える 3

0

json 応答を解析して画像の URL を取得する必要があります。次に、カスタム アダプターで grdiview を使用します。URL をカスタム アダプター コンストラクターに渡します。

json の解析には gson を使用します

https://code.google.com/p/google-gson/

同じためのチュートリアル

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

Lazy List または Universal ImageLoader を使用できます。

画像は、ローカル SD カードまたは電話メモリにキャッシュできます。URL がキーと見なされます。キーがSDカードからのSDカード表示画像に存在する場合は、サーバーからダウンロードして画像を表示し、選択した場所に同じ画像をキャッシュします。キャッシュ制限を設定できます。画像をキャッシュする独自の場所を選択することもできます。キャッシュもクリアできます。

ユーザーが大きな画像をダウンロードするのを待ってから遅延リストを表示する代わりに、オンデマンドで画像を読み込みます。画像領域がキャッシュされるため、画像をオフラインで表示できます。

https://github.com/thest1/LazyList . レイジーリスト

あなたのgetviewで

imageLoader.DisplayImage(imageurl, imageview);
ImageLoader Display method

public void DisplayImage(String url, ImageView imageView) //url and imageview as parameters
{
imageViews.put(imageView, url);
Bitmap bitmap=memoryCache.get(url);   //get image from cache using url as key
if(bitmap!=null)         //if image exists
    imageView.setImageBitmap(bitmap);  //dispaly iamge
 else   //downlaod image and dispaly. add to cache.
 {
    queuePhoto(url, imageView);
    imageView.setImageResource(stub_id);
 }

Lazy List の代替は Universal Image Loader です

https://github.com/nostra13/Android-Universal-Image-Loader . Lazy List に基づいています (同じ原理で動作します)。しかし、それは他の多くの構成を持っています。より多くの構成オプションを提供するUniversal Image Loaderを使用することをお勧めします。ダウンロードに失敗した場合、エラー画像を表示できます。角を丸くした画像を表示できます。ディスクまたはメモリにキャッシュできます。画像を圧縮できます。

カスタム アダプター コンストラクターで

 File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");

// Get singletone instance of ImageLoader
imageLoader = ImageLoader.getInstance();
// Create configuration for ImageLoader (all options are optional)
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
      // You can pass your own memory cache implementation
     .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
     .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
     .enableLogging()
     .build();
// Initialize ImageLoader with created configuration. Do it once.
imageLoader.init(config);
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();

あなたの getView() で

 ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
 imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options

ニーズに合わせて他のオプションを設定できます。

遅延読み込み/ユニバーサル イメージ ローダーに加えて、スムーズなスクロールとパフォーマンスのためにホルダーを表示できます。http://developer.android.com/training/improving-layouts/smooth-scrolling.html .

于 2013-05-14T05:03:28.793 に答える