2

AsyncTaskリモートサーバーから画像をダウンロードして、に表示するために使用していますListView。私はそれを達成するためにこのブログを使用しており、すべてが正常に機能しています。

このブログの唯一の問題は、画像のダウンロード中にColorDrawableが表示されることです。しかし、画像のダウンロード中にデフォルトの画像を表示したいと思います。下の添付画像のように:

画像一覧

ここであなたはそれを見ることができます:

  1. TaylorLootherとOyeOyeの画像はすでにダウンロードされています。
  2. サーバー上にGopalaGovindaの画像がないため、サーバーから彼の画像をダウンロードしてデフォルトの画像を表示していません。
  3. ヘルボーイの場合、画像はまだダウンロード中であるため、彼の名前に対して色の背景(細い黒い線)が表示されています。この黒い線は見せたくない。Hellboyのサーバーから画像が読み込まれなくなるまで、GopalaGovindaの前と同じようにデフォルトの画像を表示したいと思います。

    誰かがそれを行う方法を知っていますか?

4

4 に答える 4

1

次のオープンソースライブラリを使用して、AsyncTasksでの画像フェッチを管理しています: GitHubのUrlImageViewHelper

実際の画像のダウンロード中に「読み込み中」の画像を表示する機能があります。

このライブラリを使用することも、自分でこのようなことを行うこともできます。

自分で行う場合は、ImageView最初に膨らませるときに「読み込み中」の画像を使用します。次に、で、画像がダウンロードされたら、のメソッドをAsyncTaskオーバーライドしてこのビューを変更できます(このメソッドはUIスレッドで実行されるため、このメソッドでビューを変更できます)onPostExecuteAsnycTask

于 2012-09-12T10:56:09.280 に答える
1

代わりにDownloadedDrawableクラスを拡張してから、適切なスーパーコンストラクターの1つを選択して、デフォルトの画像ビットマップを指定することをお勧めします。BitmapDrawableDrawable

/**
 * A fake Drawable that will be attached to the imageView while the download is in progress.
 *
 * Contains a reference to the actual download task, so that a download task can be stopped
 * if a new binding is required, and makes sure that only the last started download process can
 * bind its result, independently of the download finish order.</p>
 */
private static class DownloadedDrawable extends BitmapDrawable {
    private final WeakReference<BitmapDownloaderTask> 
       bitmapDownloaderTaskReference;

    private DownloadedDrawable(BitmapDownloaderTask bitmapDownloaderTask,
       Resources resources, Bitmap bitmap) {
        super(resources, bitmap); // you'll have to provide these
        bitmapDownloaderTaskReference =
            new WeakReference<BitmapDownloaderTask>(bitmapDownloaderTask);
    }

    public BitmapDownloaderTask getBitmapDownloaderTask() {
        return bitmapDownloaderTaskReference.get();
    }
}
于 2012-09-13T15:39:31.300 に答える
0

または、ここからRemoteImageViewを使用することもできますhttps://github.com/kaeppler/ignition/wiki/Sample-applications

于 2012-09-12T10:48:33.530 に答える
0

ListAdapterアクティビティで、ListViewデフォルトの画像をに配置するだけですImageView

たとえば、ListAdapterアクティビティのgetViewでは、次のように実行できます。

public View getView(int position, View convertView, ViewGroup parent) {

    View vi=convertView;
    if(convertView==null)
    {
        vi = inflater.inflate(R.layout.productrow, null);
    }
    TextView text=(TextView)vi.findViewById(R.id.textViewRow);;
    ImageView imageView=(ImageView)vi.findViewById(R.id.productimage);
    TextView price=(TextView)vi.findViewById(R.id.price);


    ProductDetailModel model=productlist.get(position);

    String result=model.getp_Set();

    vi.setId(position);
    text.setText(Html.fromHtml(result));
    price.setText(" $ "+model.getp_R_Price());    

    // See here
    imageView.setImageResource(R.drawable.stub_id);

    return vi;
}
于 2012-09-12T10:53:40.357 に答える