43

このコードを使用する代わりに、Picasso ライブラリ経由で画像をダウンロードする必要があるのはなぜですか。

private Bitmap DownloadImage(String URL) 
{
    Bitmap bitmap = null; 
    InputStream in = null; 

    try 
    {
        in = OpenHttpGETConnection(URL);
        bitmap = BitmapFactory.decodeStream(in); in.close();
    } 
    catch (Exception e) 
    {
        Log.d("DownloadImage", e.getLocalizedMessage());
    }

    return bitmap; 
}

別の質問:

Picasso は UI で画像をダウンロードしますか?それともバックグラウンド スレッドでダウンロードしますか?

4

9 に答える 9

100

Android を初めて使用する方、または iOS から Android に移行する方への記録として、........

何かが劇的に変わるまでは、絶対にピカソを使わなければなりません。冗談じゃない。

正直なところ、それはとても簡単です。利点は信じられないほどです。

使い方は簡単です:

Picasso.
  with(State.mainContext).
  load(parseImageFile.getUrl()).
  into(null);

あなたは非常に簡単に:

Android での画像処理を使用して、キャッシングとスレッド化を行う必要があります。

それはとても簡単です。それをゼロから書きたくない場合は、ピカソを使用する必要があります。

ParseImageFileは基本的に機能しないことに注意してください。キャッシュなどについてはまったく役に立ちません。ピカソに代わる優れたツール (Universal Image Loader など、チェックしてください) がありますが、2014 年現在、ピカソほどうまく機能するものはありません。

超高度なものに移行する場合は注意してください...ピカソよりも優れているのは、ボレーに移行することだけです。しかし、それは大きな飛躍です。

Android での ListView のスクロールは、iOS でのテーブル処理のスクロールよりもはるかに問題があることに注意してください。Android + Picasso は、画像を含む大きなテーブル ビューをスクロールするためのすべての作業が既に完了している iOS の状況に似ていると言えます。

今日では、Picasso は、単純に、あらゆる Android アプリの中心的な部分です。ありがたいことに、これは 1 行のコードであり、セットアップも何もありません。

繰り返しになりますが、ピカソよりも「優れている」のは、ボレーに移行した場合だけです。

ところで、Volley v. Picasso に関する優れた長い記事があります。必要な場合は...

http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/

于 2014-06-06T07:49:54.167 に答える
36

ピカソは別のスレッドで画像をダウンロードし、それがあなたのために管理します:

  • その間、画像はまだダウンロード中です
  • サイズ変更
  • トリミング/センタリング/スケーリング
  • キャッシュ (毎回画像をダウンロードする必要はありません)
  • 今人気/普通の「画像フェードイン」もできます

これは非常に簡単です。例を次に示します。

    Picasso.with(context)
           .load(url)
           .placeholder(R.drawable.placeholder)
           .resize(imgWidth, imgHeight)
           .centerCrop()
           .into(image);
于 2014-03-11T16:44:05.293 に答える
12

画像には常にPicasso Libraryを使用しました。
画像の管理に非常に便利で、メモリの問題を心配する必要はありません。
サーバーまたは json から画像をダウンロードするとき、使用しました

 Picasso.with(context).load("image url").fetch();

そして、その画像のURLをデータベースまたはどこかに保存します。
これで、その画像をどこでも (オフラインでも) 使用できます。

Picasso.with(context).load("image url").into(ImageView);
于 2015-10-22T20:34:26.407 に答える
5
Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView,
  new Callback() {@
    Override
    public void onSuccess() {}@
    Override
    public void onError() {}
  });

次の理由により、Picasso ライブラリ経由で画像をダウンロードする必要があります。

  1. 画像の読み込みに時間がかかる場合に備えて、プレースホルダーを配置できます。
  2. fit()- サイズが原因で、一部の画像が imageview に読み込まれないことがあります。この方法は、大きな画像をロードするのに役立ちます。
  3. onSuccess()- 画像が正常にロードされたときに何らかのアクションを実行できます。
  4. onError()- 画像の読み込みに問題がある場合、何らかのアクションを実行できます。
于 2016-01-28T07:26:27.383 に答える
2

Picasso、Volley、Universal Image Loader などのイメージ ローダー ライブラリを使用する必要があります。これは、コードでは実行できない次のことを行うためです。

  • 効率的なマルチスレッド ネットワーキング (もちろんバックグラウンド スレッドで)
  • 複数の同一の要求を 1 つのネットワーク呼び出しに結合する
  • 保留中のリクエストのキャンセル、特に ListView アイテムのリサイクル中
  • さまざまな有効期限ポリシーによるディスクとメモリのキャッシュ
  • パフォーマンスを向上させ、メモリ使用量を削減するためのターゲット ビュー サイズへの画像のダウンサンプリング
  • UI の応答性を向上させるための UI 更新のバッチ処理 (少なくとも Volley と Picasso の場合)。

ところで、UI スレッドでネットワーク リクエストを実行してはいけません。また、HoneyComb では Android では実行できません。

于 2014-08-15T00:37:25.487 に答える
2

ネットワークから画像をロードするコア メソッドを使用する場合は、より多くのコードが必要になります。しかし、ピカソのようなサードパーティのライブラリを使用すれば、数行のコードで目標を達成できます。
Picasso Library は、これまでに見つけた中で最もシンプルで優れたライブラリです。picasso を使用してインターネットから画像を読み込むには、次のように記述するだけです。

Picasso.with(this)
.load("YOUR IMAGE URL HERE")
.placeholder(Your Drawable Resource) //this is optional the image to display while the url image is downloading
.error(Your Drawable Resource)         //this is also optional if some error has occurred in downloading the image this image would be displayed
.into(imageView);

ただし、picasso ライブラリやその他のライブラリを使用しない場合は、より多くのコード行が必要になる AsyncTask を使用する必要がある場合があります。

ソース: Picasso Android チュートリアル

于 2016-02-14T07:33:06.053 に答える
0

次の依存関係をbuild.gradle(Module:app)

compile 'com.github.bumptech.glide:glide:3.6.1'
于 2016-01-16T10:17:11.567 に答える